| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
Re:神奇的构造法,把这个题变成了水题,DFS会T的In Reply To:神奇的构造法,把这个题变成了水题,DFS会T的 Posted by:yinjian at 2016-07-29 09:53:53 //贴一下DFS吧,虽然T了
#include <stdio.h>
#include <string.h>
int n;
int ans = 0;
int maps[305][305] = {0};
bool judge(int k,int i)
{
for(int j=1; j<=n&&j!=i; j++)
if(maps[k][j]==1)
return false;
for(int j=1; j<=n&&j!=k; j++)
if(maps[j][i]==1)
return false;
for(int j=1; k+j<=n&&i+j<=n; j++)
{
if(maps[k+j][i+j]==1)
return false;
}
for(int j=1; k-j>=1&&i-j>=1; j++)
{
if(maps[k-j][i-j]==1)
return false;
}
for(int j=1; k-j>=1&&i+j<=n; j++)
{
if(maps[k-j][i+j]==1)
return false;
}
for(int j=1; k+j<=n&&i-j>=1; j++)
{
if(maps[k+j][i-j]==1)
return false;
}
return true;
}
bool dfs(int k)
{
if(k>n)
{
ans ++;
for(int i=1; i<=n; i++)
{
for(int j=1; j<=n; j++)
{
if(maps[i][j])
printf("%d",j);
}
}
printf("\n");
return true;
}
for(int i=1; i<=n; i++)
{
if(judge(k,i))
{
maps[k][i] = 1;
if(dfs(k+1))
return true;
maps[k][i] = 0;
}
}
return false;
}
int main()
{
while(scanf("%d",&n),n)
{
memset(maps,0,sizeof(maps));
for(int i=1; i<=n; i++)
{
maps[1][i] = 1;
if(dfs(2))
break;
maps[1][i] = 0;
}
//printf("%d\n",ans);
}
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator