n*n的地图,'.'表示空地,'X'表示墙,现在往地图上放置炮塔,要求两两炮塔不能同行同列(除非之间有墙),给定一种地图,问这个地图最多可以放置多少个炮塔?
#include<stdio.h>
int main()
{
int n=0;
scanf("%d",&n);
while(n!=0){
bool flagR[n]; //行
bool flagC[n]; //列
char map[n+1][n+1];
int blockNum=0;
for(int i=1;i<n+1;i++){ //初始化
flagR[i]=false;
flagC[i]=false;
}
for(int i=0;i<n+1;i++)
map[i][0]='X';
for(int j=0;j<n+1;j++)
map[0][j]='X';
for(int i=1;i<n+1;i++){ //绘制地图
fflush(stdin);
for(int j=1;j<n+1;j++)
scanf("%c",&map[i][j]);
}
for(int i=1;i<n+1;i++){
for(int j=1;j<n+1;j++){
if(map[i][j]=='X')
continue;
if( (map[i-1][j]=='X' || flagC[j]==false) && (map[i][j-1]=='X' || flagR[i]==false) ){
blockNum++;
flagR[i]=true;
flagC[j]=true;
}
}
}
printf("%d\n",blockNum);
scanf("%d",&n);
}
return 0;
}