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;
}
二、题意: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;
}
相关文章推荐
- acm pku 1321解题报告 棋盘问题
- POJ1321 棋盘问题 解题报告
- POJ-1321 棋盘问题 解题报告(搜索) 棋盘问题
- POJ_1321 棋盘问题解题报告
- POJ - 1321 棋盘问题 解题报告
- POJ-1321 棋盘问题 解题报告
- poj 1321 棋盘问题解题报告
- pku 1321 棋盘覆盖问题
- pku1321 棋盘问题 依然是DFS
- pku 1321 棋盘问题 DFS
- pku1321 棋盘问题
- pku 1321 棋盘问题
- cqyz#p3235 【棋盘问题】解题报告
- PKU1321——棋盘问题
- pku 1321 棋盘问题 简单DFS
- pku 3750 小孩报数问题 解题报告
- acm pku 2234 解题报告(取子问题)
- pku 1321 棋盘问题
- codevs 1025 选菜 背包问题 解题报告
- 问题测试数据NYOJ 478 月老的难题 (1)解题报告