POJ 1321 棋盘问题
作者:互联网
题目链接:http://poj.org/problem?id=1321
思路:对每一行开始检索,在此行放置棋子,标记其已经使用的列,回溯,此行不放置棋子也搜索一次。
AC代码:
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 using namespace std; 5 char map[10][10]; 6 int vis[10];//标记每一列是否有棋子,有棋子为1,无棋子为0 7 int n,k; 8 int ans,count; 9 void dfs(int i) 10 { 11 if(k == count) 12 { 13 ans ++; 14 return ; 15 } 16 if(i >= n) return ; 17 18 for(int j = 0;j < n;j++) 19 { 20 if(!vis[j] && map[i][j] == '#') 21 { 22 vis[j] = 1; 23 count++; 24 dfs(i + 1); 25 //回溯 26 vis[j] = 0; 27 count--; 28 } 29 } 30 dfs(i + 1);//第i行不放棋子 31 } 32 int main() 33 { 34 while(cin >> n >> k) 35 { 36 if(n == -1 && k == -1) return 0; 37 getchar(); 38 ans = 0,count = 0; 39 memset(vis,0,sizeof(vis)); 40 for(int i = 0;i < n;i++) 41 { 42 cin >> map[i]; 43 } 44 dfs(0); 45 cout << ans << endl; 46 } 47 return 0; 48 }
标签:count,10,1321,int,dfs,vis,棋子,POJ,棋盘 来源: https://www.cnblogs.com/Carered/p/10934303.html