您的位置:首页 > 其它

pku 1321 深搜 棋盘问题 解题报告

2009-03-10 16:34 351 查看
一、题目:棋盘问题。
二、题意:http://acm.pku.edu.cn/JudgeOnline/problem?id=1321
三、解决方法:
深度优先搜索。
四、源代码:
#include "string.h"
#include "stdlib.h"
#define MAX 9
int n, m;
int c;
char Chessboard[MAX][MAX];
int visit[MAX];
void dfs(int a, int k)
{
int i;

if (k == m) //k个棋子
{
c++;
return;
}
if (a > n) //在棋盘的范围内,不能找到相应的解决办法
{
return;
}
for (i = 1; i <= n; i++)
{
if (!visit[i] && Chessboard[a][i] == '#')
{
visit[i] = 1;
dfs(a + 1, k + 1); //发现'#',将所在同一行与同一竖记录
visit[i] = 0; //一边搜索一边将记号归0,以便下一次搜索与这次的深度优先搜索
}
}
dfs(a + 1, k); //如果在一行中n个棋子都为'.'的情况
}
int main()
{
freopen("1.txt", "r", stdin);
int i, j;

while (scanf("%d%d", &n, &m))
{
getchar();
if (n == -1 && m == -1)
{
break;
}
for (i = 1; i <= n; i++)
{
for (j = 1; j <= n; j++)
{
scanf("%c",&Chessboard[i][j]);
}
getchar();
}
memset(visit, 0, sizeof(visit));
c = 0;
dfs(1, 0);
printf("%d/n",c);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: