日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

POJ1321 棋盘问题

發布時間:2025/6/15 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 POJ1321 棋盘问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

??????????????????????????????????????????????????????????????????????????????????????? 棋盤問題

Time Limit: 1000MS?Memory Limit: 10000K
Total Submissions: 8895?Accepted: 4278

Description

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

Input

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

Output

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

Sample Input

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

Sample Output

2
1

1 #include <cstdlib> 2 #include <iostream> 3 #include <cstdio> 4 #include <algorithm> 5 #include <string.h> 6 #include <cmath> 7 using namespace std; 8 9 char map[10][10]; 10 int c; 11 12 int check(int n,int i) 13 { 14 int j; 15 for(j=1;j<=n;j++) 16 if(map[j][i]=='0') 17 return 0; 18 return 1; 19 } 20 21 int dfs(int n,int num,int s) 22 { 23 int i,j,k; 24 25 if(num==0) 26 {c++;return 1;} 27 if((n-s+1)<num) 28 return 0; 29 30 31 for(i=s;i<=n;i++) 32 for(j=1;j<=n;j++) 33 { 34 if(map[i][j]!='#') 35 continue; 36 if(!check(i,j)) 37 continue; 38 39 map[i][j]='0'; 40 dfs(n,num-1,i+1); 41 map[i][j]='#'; 42 } 43 44 return 1; 45 } 46 47 48 49 50 int main(int argc, char *argv[]) 51 {//freopen("C:/Users/shp/Desktop/in.txt","r",stdin); 52 //freopen("C:/Users/shp/Desktop/out.txt","w",stdout); 53 int n,k,i,j; 54 while(scanf("%d%d",&n,&k)!=EOF) 55 { 56 if((n==-1)&&(k==-1)) 57 break; 58 getchar(); 59 for(i=1;i<=n;i++) 60 {for(j=1;j<=n;j++) 61 scanf("%c",&map[i][j]); 62 getchar(); 63 } 64 65 c=0; 66 67 dfs(n,k,1); 68 cout<<c<<endl; 69 70 } 71 72 73 74 75 76 77 78 system("PAUSE"); 79 return EXIT_SUCCESS; 80 }

轉載于:https://www.cnblogs.com/zjushuiping/archive/2012/05/31/2528169.html

總結

以上是生活随笔為你收集整理的POJ1321 棋盘问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。