poj 1321 棋盘问题
2013-05-30 21:20
204 查看
Description
在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别。要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆放k个棋子的所有可行的摆放方案C。
Input
输入含有多组测试数据。
每组数据的第一行是两个正整数,n k,用一个空格隔开,表示了将在一个n*n的矩阵内描述棋盘,以及摆放棋子的数目。 n <= 8 , k <= n
当为-1 -1时表示输入结束。
随后的n行描述了棋盘的形状:每行有n个字符,其中 # 表示棋盘区域, . 表示空白区域(数据保证不出现多余的空白行或者空白列)。
Output
对于每一组数据,给出一行输出,输出摆放的方案数目C (数据保证C<2^31)。
Sample Input
Sample Output
View Code
题目意思很明显,简单的DFS
注意:
标记每一行和每一列时最好用额外的数组装起来,避免把一些不应该改变的值进行了改变
放到数组里面的条件是,那一点必须是棋盘区域,以及没有被标记过。
在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别。要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆放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
#include <iostream> #include <stdio.h> #include <string.h> using namespace std; int n,k; char map[10][10]; bool flag[10][10]; int count,cnt; struct node { int x,y; }dd[70]; void dfs(int step,int row) { if(step==k) { count++; return; } int i,j; for(i=0;i<cnt;i++) { if(!flag[dd[i].x][dd[i].y] && dd[i].x>row) { node ff[70]; int p=0; for(j=0;j<n;j++) { if(map[dd[i].x][j]=='#' && !flag[dd[i].x][j]) { ff[p].x=dd[i].x; ff[p++].y=j; } } for(j=0;j<n;j++) { if(map[j][dd[i].y]=='#' && !flag[j][dd[i].y]) { ff[p].x=j; ff[p++].y=dd[i].y; } } for(j=0;j<p;j++) { flag[ff[j].x][ff[j].y]=true; } dfs(step+1,dd[i].x); for(j=0;j<p;j++) { flag[ff[j].x][ff[j].y]=false; } } } } int main() { while(~scanf("%d%d",&n,&k)) { if(n==-1 && k==-1) break; int i,j; for(i=0;i<n;i++) { scanf("%s",map[i]); } cnt=0; for(i=0;i<n;i++) { for(j=0;j<n;j++) { if(map[i][j]=='#') { dd[cnt].x=i; dd[cnt++].y=j; } } } count=0; memset(flag,false,sizeof(flag)); dfs(0,-1); printf("%d\n",count); } return 0; }
View Code
题目意思很明显,简单的DFS
注意:
标记每一行和每一列时最好用额外的数组装起来,避免把一些不应该改变的值进行了改变
放到数组里面的条件是,那一点必须是棋盘区域,以及没有被标记过。
相关文章推荐
- POJ ~ 1321 ~ 棋盘问题(DFS)
- POJ 1321 棋盘问题
- POJ 1321-棋盘问题 简单搜索DFS
- POJ 1321 棋盘问题(深搜)
- POJ 1321 棋盘问题——dfs
- POJ1321:棋盘问题
- POJ 1321 棋盘问题(DFS)
- poj 1321 棋盘问题(dfs)
- poj1321——棋盘问题
- POJ 1321 棋盘问题 简单搜索
- POJ - 1321 棋盘问题
- poj 1321 棋盘问题 【DFS】
- POJ 1321 棋盘问题(DFS)
- POJ-1321 棋盘问题 解题报告
- POJ-1321-棋盘问题
- POJ 1321 棋盘问题 ; ( 1 )
- POJ 1321棋盘问题(DFS)
- POJ 1321棋盘不同行不同列问题 dfs
- POJ 1321-棋盘问题-简单搜索DFS
- POJ-1321-棋盘问题