原题:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1002
#include<stdio.h>
#include<string.h>
char maps[5][5];
int n,ans;
int judge(int x,int y)
{
int temp;
if(maps[x][y] == 'X' || maps[x][y] == 'C')return 0;
for(temp=y-1;temp>=1;temp--)
{
if(maps[x][temp] == 'X')break;
else if(maps[x][temp] == 'C')return 0;
}
for(temp=y+1;temp<=n;temp++)
{
if(maps[x][temp] == 'X')break;
else if(maps[x][temp] == 'C')return 0;
}
for(temp=x-1;temp>=1;temp--)
{
if(maps[temp][y] == 'X')break;
else if(maps[temp][y] == 'C')return 0;
}
for(temp=x+1;temp<=n;temp++)
{
if(maps[temp][y] == 'X')break;
else if(maps[temp][y] == 'C')return 0;
}
return 1;
}
void dfs(int k)
{
int i,j;
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
if(judge(i,j))
{
maps[i][j] = 'C';
dfs(k+1);
maps[i][j] = '.';
}
}
}
ans = ans>k?ans:k;
}
int main()
{
int i,j;
while(1)
{
scanf("%d",&n);
if(n == 0)break;
scanf("\n");
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
scanf("%c",&maps[i][j]);
if(i<n)
scanf("\n");
}
ans = 0;
dfs(0);
printf("%d\n",ans);
}
return 0;
}
本文提供了一道来自浙江大学ACM在线评测系统的编程题(题目编号1002)的解答思路及完整代码实现。该题通过深度优先搜索(DFS)算法寻找在特定棋盘上放置皇后的方法数,棋盘由字符数组表示,包含障碍物位置。代码使用C语言编写,详细展示了如何避免皇后互相攻击,并统计合法布局方案。
809

被折叠的 条评论
为什么被折叠?



