hdu 1045

来源:互联网 发布:mysql日期格式化 编辑:程序博客网 时间:2024/05/16 01:47

题目大意:在边长为n的正方形中放入碉堡,在同一行或同一列没有墙的阻隔的话不能存在2个碉堡,墙用X表示,问最多能放入的碉堡数目。

#include <stdio.h>#include <string.h>char f[4][4];int max,num,n;int vis[4][4];int lay(int x,int y)//判断是否能放{int x1,y1;if(vis[x][y]==1||vis[x][y]==2)return 0;x1=x+1;while(x1<n&&vis[x1][y]!=1)//下面是判断到墙为止或越界是否有其他碉堡{if(vis[x1][y]==2)return 0;x1++;}x1=x-1;while(x1>=0&&vis[x1][y]!=1){if(vis[x1][y]==2)return 0;x1--;}y1=y+1;while(y1<n&&vis[x][y1]!=1){if(vis[x][y1]==2)return 0;y1++;}y1=y-1;while(y1>=0&&vis[x][y1]!=1){if(vis[x][y1]==2)return 0;y1--;}return 1;}void DFS(){int i,j;for(i=0;i<n;i++){for(j=0;j<n;j++){if(lay(i,j)){vis[i][j]=2;num++;if(num>max)max=num;DFS();vis[i][j]=0;num--;}}}}int main(){int i,j;while(scanf("%d",&n)!=EOF&&n!=0){getchar();num=max=0;memset(vis,0,sizeof(vis));for(i=0;i<n;i++){for(j=0;j<n;j++){scanf("%c",&f[i][j]);if(f[i][j]=='X')vis[i][j]=1;}getchar();}DFS();printf("%d\n",max);}return 0;}


0 0
原创粉丝点击