提交时间:2024-08-21 10:01:35

运行 ID: 175669

#include <iostream> #include<bits/stdc++.h> using namespace std; char fie[5][5],q[5][5]; int n,ans,sum,f; int row[5],line[5];//储存行列霸王是否存在的数组 void dfs(int x,int y) { for(int i = y; i<=n; i++) { if(q[x][y]=='.'&&fie[x][y]=='.'&&!row[x]&&!line[y]) { fie[x][y]='R';//放人 row[x]=1;//霸 line[y]=1;//霸 } else if(q[x][y]=='X') { row[x]=line[y]=0;//回归0 } else if(fie[x][y]=='R')continue; if(x==n&&y==n)//走到最后,判断放的人数(R的数量) { for(int i = 1; i<=n; i++) { for(int j = 1; j<=n; j++) { if(fie[i][j]=='R') { sum++; } } } ans=max(ans,sum); sum=0; return; } else if(y==n) { dfs(x+1,1);//往右走 fie[x][y]='.';//回溯 return; } else { dfs(x,y+1);//往左走 fie[x][y]='.';//回溯 return; } } } int main() { while(cin>>n&&n) { ans=0; for(int i = 1; i<=n; i++) { for(int j = 1; j<=n; j++) { cin>>q[i][j]; } } for(int i = 1; i<=n; i++) { for(int j = 1; j<=n; j++) { sum=0; memset(fie,'.',sizeof(fie)); memset(row,0,sizeof(row)); memset(line,0,sizeof(line));//每个点判断前都要初始化 dfs(i,j); } } cout<<ans<<endl; } return 0; }