poj1321 棋盘问题
来源:互联网 发布:等待软件工作室网址 编辑:程序博客网 时间:2024/04/29 22:28
Problem Description
在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别。要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆放k个棋子的所有可行的摆放方案C。
Input
输入含有多组测试数据。 每组数据的第一行是两个正整数,n k,用一个空格隔开,表示了将在一个n*n的矩阵内描述棋盘,以及摆放棋子的数目。 n <= 8 , k <= n 当为-1 -1时表示输入结束。 随后的n行描述了棋盘的形状:每行有n个字符,其中 # 表示棋盘区域, . 表示空白区域(数据保证不出现多余的空白行或者空白列)。
Output
对于每一组数据,给出一行输出,输出摆放的方案数目C (数据保证C< 2^31)。
Example Input
2 1#..#4 4...#..#..#..#...-1 -1
Example Output
21
dfs,借鉴了下网上的代码。
#include <stdio.h>#include <string.h>int map[10][10];int book[10];int n,k,cnt=0;void dfs(int m,int num){ if(num==k) { cnt++; return ; } if(m>n) return ; int i,j; for(i=0;i<n;i++) { if(map[m][i]&&!book[i]) { book[i]=1; dfs(m+1,num+1); book[i]=0; } } dfs(m+1,num); return ;}int main(){ while(~scanf("%d %d",&n,&k)) { getchar(); if(k==-1&&n==-1) break; memset(map,0,sizeof(map)); memset(book,0,sizeof(book)); cnt=0; int i,j; for(i=0;i<n;i++) { for(j=0;j<=n;j++) { char s; scanf("%c",&s); //putchar(s); if(s=='#') map[i][j]=1; } } dfs(0,0); printf("%d\n",cnt); } return 0;}/***************************************************User name: Result: AcceptedTake time: 0msTake Memory: 112KBSubmit time: 2017-02-20 15:16:23****************************************************/
0 0
- poj1321棋盘问题
- poj1321 棋盘问题
- poj1321(dfs棋盘问题)
- poj1321 - 棋盘问题
- poj1321棋盘问题
- POJ1321--棋盘问题
- POJ1321( 棋盘问题)
- POJ1321:棋盘问题
- poj1321 棋盘问题
- poj1321棋盘问题
- poj1321棋盘问题{wa}
- poj1321 棋盘问题 dfs
- poj1321棋盘问题
- [POJ1321]棋盘问题
- POJ1321 棋盘问题
- poj1321 棋盘问题
- poj1321 棋盘问题(DFS)
- POJ1321----棋盘问题
- 开灯问题
- 微信支付官方demo报Error:Execution failed for task ':app:mergeDebugResources'.
- 图像块的访问(填充 padding,步长 stride,窗 Window/kernel/filter)
- Java利器之UML类图详解
- 关于编程、重构等 42条建议 上
- poj1321 棋盘问题
- 轨迹数据库的索引建立
- atexit简述
- C - Magical GCD UVALive - 6582 (STL )
- Android动画之萌萌哒蜡烛吹蜡烛动画
- 图片旋转 iOS
- map下标操作
- 高斯消元
- 2017年2月20日实习日记