Don't Get Rooked
YOYO
posted @ 2008年11月24日 06:24
in 【ICPC】解题报告
with tags
回溯
, 1913 阅读
PKU 1315:http://acm.pku.edu.cn/JudgeOnline/problem?id=1315
-
#include<iostream>
-
using namespace std;
-
int n,m;
-
int map[10][10];
-
-
bool check(int x, int y){
-
int i;
-
for(i=x-1;i>=0&&map[i][y]>=0;i--){
-
if(map[i][y]==1)return false;
-
}
-
for(i=x+1;i<n&&map[i][y]>=0;i++){
-
if(map[i][y]==1)return false;
-
}
-
for(i=y-1;i>=0&&map[x][i]>=0;i--){
-
if(map[x][i]==1)return false;
-
}
-
for(i=y+1;i<n&&map[x][i]>=0;i++){
-
if(map[x][i]==1)return false;
-
}
-
return true;
-
}
-
-
void search(int x, int y, int t){
-
map[x][y]=1;
-
int i,j;
-
for(i=y+1;i<n;i++){
-
if(map[x][i]==-1)continue;
-
if(check(x,i)){
-
search(x,i,t+1);
-
}
-
}
-
for(i=x+1;i<n;i++){
-
for(j=0;j<n;j++){
-
if(map[i][j]==-1)continue;
-
if(check(i,j)){
-
search(i,j,t+1);
-
}
-
}
-
}
-
if(t>m)m=t;
-
map[x][y]=0;
-
}
-
-
int main(){
-
while(cin>>n&&n){
-
m = 0;
-
int i,j;
-
for(i=0;i<n;i++){
-
for(j=0;j<n;j++){
-
char c;cin>>c;
-
if(c=='X'){
-
map[i][j]=-1;
-
}else{
-
map[i][j]=0;
-
}
-
}
-
}
-
for(i=0;i<n;i++){
-
for(j=0;j<n;j++){
-
if(map[i][j]==-1)continue;
-
search(i,j,1);
-
map[i][j]=0;
-
}
-
}
-
cout<<m<<endl;
-
}
-
return 0;
-
}
狂复习简单题……
- 无匹配