国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

poj1321 棋盤問題

2019-11-08 01:40:25
字體:
來源:轉載
供稿:網友

PRoblem Description

在一個給定形狀的棋盤(形狀可能是不規則的)上面擺放棋子,棋子沒有區別。要求擺放時任意的兩個棋子不能放在棋盤中的同一行或者同一列,請編程求解對于給定形狀和大小的棋盤,擺放k個棋子的所有可行的擺放方案C。

Input

輸入含有多組測試數據。 每組數據的第一行是兩個正整數,n k,用一個空格隔開,表示了將在一個n*n的矩陣內描述棋盤,以及擺放棋子的數目。 n <= 8 , k <= n 當為-1 -1時表示輸入結束。 隨后的n行描述了棋盤的形狀:每行有n個字符,其中 # 表示棋盤區域, . 表示空白區域(數據保證不出現多余的空白行或者空白列)。

Output

對于每一組數據,給出一行輸出,輸出擺放的方案數目C (數據保證C< 2^31)。

Example Input

2 1#..#4 4...#..#..#..#...-1 -1

Example Output

21

dfs,借鑒了下網上的代碼。

#include <stdio.h>#include <string.h>int map[10][10];int book[10];int n,k,cnt=0;void dfs(int m,int num){    if(num==k)    {        cnt++;        return ;    }    if(m>n)        return ;    int i,j;    for(i=0;i<n;i++)    {        if(map[m][i]&&!book[i])        {            book[i]=1;            dfs(m+1,num+1);            book[i]=0;        }    }    dfs(m+1,num);    return ;}int main(){    while(~scanf("%d %d",&n,&k))    {                getchar();        if(k==-1&&n==-1)            break;        memset(map,0,sizeof(map));        memset(book,0,sizeof(book));        cnt=0;        int i,j;        for(i=0;i<n;i++)        {            for(j=0;j<=n;j++)            {                char s;                scanf("%c",&s);                //putchar(s);                if(s=='#')                    map[i][j]=1;            }        }        dfs(0,0);        printf("%d/n",cnt);    }    return 0;}/***************************************************User name: Result: AcceptedTake time: 0msTake Memory: 112KBSubmit time: 2017-02-20 15:16:23****************************************************/


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 利津县| 威信县| 乃东县| 大英县| 洪江市| 西吉县| 南丰县| 扶沟县| 会同县| 郯城县| 博爱县| 淳安县| 丰宁| 通化县| 噶尔县| 胶州市| 安新县| 临夏县| 信阳市| 防城港市| 新宁县| 罗定市| 永登县| 弋阳县| 闽清县| 大冶市| 梁山县| 剑阁县| 内丘县| 正宁县| 敦煌市| 华阴市| 遂溪县| 本溪市| 麻城市| 城固县| 印江| 深水埗区| 井陉县| 深水埗区| 深水埗区|