标签:name with vertica sum aced next present most scanf
4
.X..
....
XX..
....
2
XX
.X
3
.X.
X.X
.X.
3
...
.XX
.XX
4
....
....
....
....
0
5
1
5
2
4
思路:
其实就是dfs一遍即可,从0,0开始dfs,每次dfs时都查看一下符不符合要求。
源码
#include<cstdio>
#include<algorithm>
using namespace std;
int ans,n;
char s[5][5];
bool check(int x,int y)
{
for(int i=x-1;i>=0;i--)
{
if(s[i][y]==‘X‘)
break;
if(s[i][y]==‘#‘)
return false;
}
for(int i=y-1;i>=0;i--)
{
if(s[x][i]==‘X‘)
break;
if(s[x][i]==‘#‘)
return false;
}
return true;
}
void dfs(int position,int curr)
{
if(position==n*n)
{
ans=max(ans,curr);
return ;
}
int x=position/n;
int y=position%n;
if(s[x][y]==‘.‘ && check(x,y))
{
s[x][y]=‘#‘;
dfs(position+1,curr+1);
s[x][y]=‘.‘;
}
dfs(position+1,curr);
}
int main()
{
while(scanf("%d", &n) && n!=0)
{
ans=0;
for(int i=0;i<4;i++)
for(int j=0;j<4;j++)
s[i][j]=‘X‘;
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
scanf(" %c", &s[i][j]);
dfs(0,0);
printf("%d\n", ans);
}
}
标签:name with vertica sum aced next present most scanf
原文地址:https://www.cnblogs.com/Wolfbeyond/p/9457895.html