zoj 1002 Fire Net

/* 深搜解法 总体思想是这样的 用map存放地图 元素值为2表示是墙 1表示是碉堡 0表示是街道 从左上角第一个开始扫描一直扫描到右下角最后一个位置 找到可以放置碉堡的地方然后放置第一个碉堡 标记该位置为碉堡放置位置 然后再从头扫描可以放置碉堡的地方 重复上述过程直到找不到可以放置碉堡的位置的时候为止 用ans记录深搜的最大深度即为可以放置的最大碉堡数目 */ #define LOCAL #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; int n,ans,map[5][5]; bool legal(int x,int y)//判断当前位置是否可放置碉堡 { int i; //依次检索四个方向如果出现了不可放置的情况直接返回当前位置不可用 //若没有则待定 if(map[x][y]) return false; if(x>0)//up for(i=x-1;i>=1;i--) if(map[i][y]==2) break; else if(map[i][y]==1) return false; if(x0)//left for(i=y-1;i>=1;i--) if(map[x][i]==2) break; else if(map[x][i]==1) return false; if(ym?ans:m);//记录最大深搜深度 } int main() { #ifdef LOCAL freopen("input.txt","r",stdin); freopen("output.txt","w",stdout); #endif int i,j;char ch; while(cin>>n&&n) { memset(map,0,sizeof(map));//初始化地图 for(i=1;i<=n;i++) { for(j=1;j<=n;j++) { cin>>ch; if(ch=='X')//标记墙的位置 map[i][j]=2; } } ans=0; DFS(0);//从深度为0开始深搜 cout<

你可能感兴趣的:(zoj 1002 Fire Net)