POJ 1321 棋盘问题
来源:互联网 发布:仁王pc版帧数优化补丁 编辑:程序博客网 时间:2024/06/06 04:08
棋盘问题
Time Limit: 1000MS Memory Limit: 10000KTotal Submissions: 29621 Accepted: 14687
Description
在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别。要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆放k个棋子的所有可行的摆放方案C。
Input
输入含有多组测试数据。
每组数据的第一行是两个正整数,n k,用一个空格隔开,表示了将在一个n*n的矩阵内描述棋盘,以及摆放棋子的数目。 n <= 8 , k <= n
当为-1 -1时表示输入结束。
随后的n行描述了棋盘的形状:每行有n个字符,其中 # 表示棋盘区域, . 表示空白区域(数据保证不出现多余的空白行或者空白列)。
每组数据的第一行是两个正整数,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
21
Source
蔡错@pku
题目链接: http://poj.org/problem?id=1321
这道题目属于简单搜索,但图形不定.
参考了别人的代码: http://blog.csdn.net/lyy289065406/article/details/6647674
#include<stdio.h>#include <string.h>int chess[9][9];int vist_col[9]; //列标记int status; //状态计数器int n,k;void DFS(int row,int num) //逐行搜索,row为当前搜索行,num为已填充的棋子数{ int j; if(num==k) { status++; return; } if(row>n) //配合下面DFS(row+1,num); 语句使用,避免搜索越界 return; for(j=0; j<n; j++) if(chess[row][j] && !vist_col[j]) { vist_col[j]=1; //放置棋子的列标记 DFS(row+1,num+1); vist_col[j]=0; //回溯后,说明摆好棋子的状态已记录,当前的列标记还原 } DFS(row+1,num); //这里是难点,当k<n时,row在等于n之前就可能已经把全部棋子放好 //又由于当全部棋子都放好后的某个棋盘状态已经在前面循环时记录了 //因此为了处理多余行,令当前位置先不放棋子,搜索在下一行放棋子的情况 return;}int main(int i,int j){ while(scanf("%d%d",&n,&k)!=EOF) { getchar(); if(n==-1 && k==-1) break; memset(chess,0,sizeof(chess)); memset(vist_col,0,sizeof(vist_col)); status=0; for(i=0; i<n; i++) { for(j=0; j<n; j++) { char temp; //cin>>temp; scanf("%c",&temp); if(temp=='#') { chess[i][j]=1; } } getchar(); } DFS(0,0); //注意初始化的值别弄错了 printf("%d\n",status); } return 0;}
0 0
- POJ 1321 棋盘问题
- poj 1321 棋盘问题
- poj 1321 棋盘问题
- Poj 1321 棋盘问题
- POJ 1321 棋盘问题
- POJ 1321 棋盘问题
- POJ-1321-棋盘问题
- poj 1321棋盘问题
- POJ 1321 棋盘问题
- poj 1321 棋盘问题
- POJ 1321 棋盘问题
- poj 1321 棋盘问题
- poj 1321 棋盘问题
- poj 1321 棋盘问题
- poj 1321 棋盘问题
- POJ 1321 - 棋盘问题
- poj 1321棋盘问题
- POJ 1321 棋盘问题
- 4412裸机程序之ddr
- 解决android签名引起使用第三方平台的不便(如百度地图,QQ,微信等)
- Linux SPI总线和设备驱动架构之一:系统概述
- IAR使用小技巧之群英荟萃
- 4412裸机程序之mmu
- POJ 1321 棋盘问题
- [bat][批处理][自动化测试]用批处理实现以日期和时间做文件文件夹名
- Spark修炼之道(进阶篇)——Spark入门到精通:第二节 Hadoop、Spark生成圈简介
- 徒步一千里 1930年 (長白縣)
- Volley源码分析
- python modules: os, sys, platform
- sicily 1242. Suit Distribution
- android TypedValue.applyDimension()的作用
- 在opencv中,如何将二维数组转化为一副图像进行显示?