UVa 639 Don't Get Rooked
2014-05-18 20:03
316 查看
此题跟八个皇后有些相似......只不过加了“墙”......要注意DFS参数设定
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int MAXN=5;
int n,ans=0;
int map[MAXN][MAXN];
int vis[MAXN][MAXN];
bool ok(int x, int y)
{
if(map[x][y] || vis[x][y])
return false;
for(int i=x-1; i>=0 && !map[i][y]; i--) //判断列是否合法
if(vis[i][y])
return false;
for(int i= y-1; i>=0 && !map[x][i]; i--) //判断行是否合法
if( vis[x][i])
return false;
return true;
}
void dfs(int x,int y, int num)
{
if(x == n)
{
if(num >ans)
ans=num;
return;
}
if(ok(x, y))
{
vis[x][y] =1;
if(y >= n-1)
dfs(x+1, 0, num+1);
else
dfs(x, y+1, num+1);
vis[x][y]=0;
}//在这一定不能有else,不然无法遍历矩阵全部数据
if(y >= n-1)
dfs(x+1, 0, num);
else
dfs(x, y+1, num);
}
int main()
{
char s[MAXN];
while(scanf("%d", &n) != EOF && n)
{
memset(map, 0, sizeof(map));
memset(vis, 0, sizeof(vis));
for(int i=0; i<n; i++)
{
scanf("%s", s);
for(int j=0; j<n; j++)
if(s[j] == 'X')
map[i][j]=1;
}
ans=0;
dfs(0,0,0);
printf("%d\n", ans);
}
return 0;
}
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int MAXN=5;
int n,ans=0;
int map[MAXN][MAXN];
int vis[MAXN][MAXN];
bool ok(int x, int y)
{
if(map[x][y] || vis[x][y])
return false;
for(int i=x-1; i>=0 && !map[i][y]; i--) //判断列是否合法
if(vis[i][y])
return false;
for(int i= y-1; i>=0 && !map[x][i]; i--) //判断行是否合法
if( vis[x][i])
return false;
return true;
}
void dfs(int x,int y, int num)
{
if(x == n)
{
if(num >ans)
ans=num;
return;
}
if(ok(x, y))
{
vis[x][y] =1;
if(y >= n-1)
dfs(x+1, 0, num+1);
else
dfs(x, y+1, num+1);
vis[x][y]=0;
}//在这一定不能有else,不然无法遍历矩阵全部数据
if(y >= n-1)
dfs(x+1, 0, num);
else
dfs(x, y+1, num);
}
int main()
{
char s[MAXN];
while(scanf("%d", &n) != EOF && n)
{
memset(map, 0, sizeof(map));
memset(vis, 0, sizeof(vis));
for(int i=0; i<n; i++)
{
scanf("%s", s);
for(int j=0; j<n; j++)
if(s[j] == 'X')
map[i][j]=1;
}
ans=0;
dfs(0,0,0);
printf("%d\n", ans);
}
return 0;
}
相关文章推荐
- UVA 639 - Don't Get Rooked(深搜)
- UVA - 639 Don't Get Rooked
- UVa 639 Don't Get Rooked
- uva 639 Don't Get Rooked 变形N皇后问题 暴力回溯
- uva 639 - Don't Get Rooked
- uva 639 Don't Get Rooked
- POJ1315 UVA639 UVALive5325 Don't Get Rooked
- UVA 639 - Don't Get Rooked
- uva 639 Don't Get Rooked
- uva 639 Don't Get Rooked (暴力回溯 )
- UVA 639 Don't Get Rooked
- uva - 639 - Don't Get Rooked
- UVA - 639 Don't Get Rooked
- UVa 639 Don't Get Rooked (DFS好题)
- UVA 639 Don't Get Rooked
- UVA 639 - Don't Get Rooked
- UVa 639 - Don't Get Rooked, 类八皇后问题
- UVA 639 Don't Get Rooked
- UVa 639 & HOJ 1086 & POJ 1315 - Don't Get Rooked
- uva639 - Don't Get Rooked