POJ - 1321 棋盘问题 解题报告
2017-02-12 21:12
337 查看
题目大意:
让你在一个n*n(n<=8)的棋盘中放k(k<n)个棋子,要求每个棋子都不能在同一行或者同一列 。然后你得输出对于每个棋盘有多少种摆放方式。类似于组合而不是排列。
注:感觉搜索还是要反复熟悉代码。
让你在一个n*n(n<=8)的棋盘中放k(k<n)个棋子,要求每个棋子都不能在同一行或者同一列 。然后你得输出对于每个棋盘有多少种摆放方式。类似于组合而不是排列。
#include #include #include #include #define N 10 using namespace std; char map ={0}; bool vis ={0}; int n,k; int s=0; //bool viss ={0}; void input() { char l; l=getchar(); for(int i=1;i<=n;i++) { for(int j=1;j<=n+1;j++) { scanf("%c",&map[j]); } } } void dfs(int x,int y,int m)//从(x,y)开始搜索,并且该点为第m个 { vis[x][y]=1; if(m==k) { s++; return; } for(int i=x+1;i<=n;i++) { for(int j=1;j<=n;j++) { //if(viss[i][j]==1)continue; if(vis[i][j]==1)continue; int flag=0; for(int h=1;h<=n;h++) { if(vis[h][j]==1||vis[i][h]==1) { flag=1;break; } } if(flag==1)continue; if(map[i][j]=='.')continue; //cout<[i]>n>>k) { if(n==-1&&k==-1)break; s=0; input(); //ceshi1(); //memset(viss,0,sizeof(viss)); for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { memset(vis,0,sizeof(vis)); if(map[i][j]=='.')continue; dfs(i,j,1); //viss[i][j]=1; } } cout<
注:感觉搜索还是要反复熟悉代码。
相关文章推荐
- POJ1321 棋盘问题 解题报告
- POJ-1321 棋盘问题 解题报告(搜索) 棋盘问题
- POJ-1321 棋盘问题 解题报告
- poj 1321 棋盘问题解题报告
- POJ_1321 棋盘问题解题报告
- pku 1321 深搜 棋盘问题 解题报告
- acm pku 1321解题报告 棋盘问题
- 棋盘问题--POJ 1321
- POJ 1321 棋盘问题
- poj1321棋盘问题
- poj 1321 棋盘问题
- poj1321——棋盘问题
- 【原】 POJ 3750 小孩报数问题 Joseph相关问题详解 解题报告
- POJ 2811 熄灯问题 解题报告
- POJ 1017 装箱问题 解题报告
- poj 1321 棋盘问题 DFS+回溯 回溯学习
- 【原】 POJ 3517 And Then There Was One Joseph问题 解题报告
- poj1321解题报告
- POJ 1321 棋盘问题类似八皇后 dfs搜索
- POJ 2746 约瑟夫问题 解题报告