hdu 杭电 1045 Fire Net
题意:地图中最多能放多少炮台。
解法:深搜。
ac代码:
View Code
#include<iostream> using namespace std; char map[8][8]; int sum,maxi,n; bool check(int x,int y) { if(map[x][y]=='X')return 0; int i; for(i=x-1;i>=0;i--) { if(map[i][y]=='X')break; if(map[i][y]=='0')return 0; } for(i=y-1;i>=0;i--) { if(map[x][i]=='X')break; if(map[x][i]=='0')return 0; } return 1; } void dfs(int num,int sum) { if(num==n*n) { if(maxi<sum) maxi=sum; return ; } int x=num/n; int y=num%n; if(check(x,y)) { map[x][y]='0'; dfs(num+1,sum+1); map[x][y]='.'; } dfs(num+1,sum); } int main() { while(cin>>n,n) { int i,j; for(i=0;i<n;i++) for(j=0;j<n;j++) cin>>map[i][j]; memset(co,0,sizeof(co)); memset(ro,0,sizeof(ro)); memset(use,0,sizeof(use)); sum=0; maxi=0; dfs(0,0); cout<<maxi<<endl; } return 0; } /* 4 .X.. .... XX.. .... 4 .X.X X.X. .X.X X.X. 3 ... ... ... 3 X.. .X. ..X 4 X.X. .X.X X.X. .X.X 2 XX .X 3 .X. X.X .X. 3 ... .XX .XX 4 .... .... .... .... 2 .. .. 2 XX X. 2 .X .X 2 .. XX 2 XX .. */