地址:
题意:给定一个最大4*4的方形地图,里面有墙(X)和空地(.)。在每个空地上可以放大炮,但两个大炮如果在同一行或同一列并且之间没有墙阻隔的话,会互相攻击,所以不能同时存在。问最多能放多少个大炮。
mark:数据小,直接dfs就可以了。1WA,把保存状态的数组开成了全局的- -。据说还可以二分匹配过。
代码:
1 # include2 # include 3 4 5 char g[4][4] ; 6 int vis[4][4] ; 7 int n, ans ; 8 int tab[4][2] = { 0,1,0,-1,1,0,-1,0} ; 9 10 11 void dfs(int pos, int num)12 {13 int x = pos/n, y = pos%n ;14 int xx, yy, i, j ;15 int buff[4][4] ;16 // if(pos==n*n) return ;17 if (g[x][y]=='X')return ;18 if (vis[x][y]==1) return ;19 20 for(i=0;i =0&&xx =0&&yy ans)ans=num+1;30 for(i=pos+1;i