poj1321 棋盘问题 回溯
2017-07-10 23:43
253 查看
中文题:题目链接
八皇后问题,回溯即可
代码行下标从1开始,列下标从0开始,数组u初始设为-1
八皇后问题,回溯即可
代码行下标从1开始,列下标从0开始,数组u初始设为-1
#include<cstdio> #include<iostream> using namespace std; char a[10][10]; //棋盘 int n,k; int u[15]; //u[i]表示第i行棋子放在了第j列 long long ans; bool pan(int i){ //判断第i行是否合法 for(int j=1;j<i;j++) if(u[j]==u[i]) return false; return true; } void dfs(int i,int sum){ //搜到第i行时已经有放了sum个棋子 //cout<<i<<" "<<sum<<" "<<ans<<" -1"<<endl; if(sum==k||i>n){ if(sum==k) ans++; return ; } if(n-i>=k-sum){ //剪个枝 u[i]=-1; dfs(i+1,sum); } for(int j=0;j<n;j++) if(a[i][j]=='#'){ u[i]=j; if(pan(i)){ dfs(i+1,sum+1); u[i]=-1; } } } int main(){ while((cin>>n>>k)&&(n!=-1||k!=-1)){ for(int i=0;i<14;i++) u[i]=-1; ans=0; for(int i=1;i<=n;i++) cin>>a[i]; dfs(1,0); cout<<ans<<endl; } }
相关文章推荐
- poj 1321 棋盘问题(回溯)
- POJ_1321——棋盘问题,回溯+剪枝
- POJ - 1321 棋盘问题(回溯 DFS)
- poj 1321 棋盘问题 DFS+回溯 回溯学习
- poj 1321 棋盘问题 DFS+回溯 回溯学习
- (简单) POJ 1321 棋盘问题,回溯。
- poj 1321 棋盘问题(DFS,回溯)
- POJ - 1321 棋盘问题 (DFS 回溯)
- POJ 1321 棋盘问题 (DFS + 回溯)
- POJ 1321 棋盘问题 深搜+回溯
- POJ 1321 棋盘问题(深搜 \ 回溯)
- POJ 1321----棋盘问题(dfs+回溯)
- poj 1321 棋盘问题 dfs 回溯
- poj 1321 棋盘问题(dfs,回溯)
- POJ 1321 棋盘问题(dfs回溯)
- Poj 1321 棋盘问题 【回溯、类N皇后】
- POJ 1321棋盘问题(简单搜索dfs回溯)
- POJ-1321 棋盘问题(DFS+回溯)
- POJ 1321 棋盘问题 (DFS+回溯)
- poj 1321 棋盘问题 (dfs 回溯)