标签: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