Fire Net

来源:互联网 发布:三菱plc编程入门pdf 编辑:程序博客网 时间:2024/05/17 05:50

http://acm.tzc.edu.cn/acmhome/problemdetail.do?&method=showdetail&id=1162

#include<iostream>#include<vector>#include<queue>#include<numeric>#include<algorithm>#include<sstream>#include<cstdio>#include<cstring>#include<string>#include<ctime>using namespace std;char G[4][4];int N,vis[4][4],cnt;bool check(int x,int y){vis[x][y]=1;int sum=0;for(int i=0;i<N;i++){if(G[x][i]=='.'&&vis[x][i]) sum+=1;if(sum>1) {vis[x][y]=0;return false;}if(G[x][i]=='X') sum=0;}sum=0;for(int i=0;i<N;i++){if(G[i][y]=='.'&&vis[i][y]) sum+=1;if(sum>1) {vis[x][y]=0;return false;}if(G[i][y]=='X') sum=0;}vis[x][y]=0;return true;}void print(int A[][4]){for(int i=0;i<N;i++){for(int j=0;j<N;j++)cout<<A[i][j];cout<<endl;}cout<<endl;}int dfs(int cur,int sum){if(cur>N) return 0;cnt=max(cnt,sum);for(int j=0;j<N;j++){if(G[cur][j]=='.'&&!vis[cur][j]&&check(cur,j)){vis[cur][j]=1;dfs(cur,sum+1);  //同一行再放 vis[cur][j]=0;}dfs(cur+1,sum);    //直接放下一行去了 }}int main(){while(scanf("%d",&N)==1&&N){for(int i=0;i<N;i++)for(int j=0;j<N;j++)cin>>G[i][j];cnt=0;dfs(0,0);cout<<cnt<<endl;}return 0;}


0 0
原创粉丝点击