话说最近PhoenixWright最近太闲了,于是就自己建了个迷宫自娱自乐。但是这迷宫实在是太难看了,都吸引不了MM来玩= =。于是他想给这迷宫的墙刷上好看的颜色,但是由于Money有限,他又不想把所有的墙都刷上颜色,于是他请你来帮忙,把迷宫里所有能看到的墙都给刷上颜色,不能看到的墙就不要刷。
比如我们给出一个4X5的迷宫,用’#’表示墙,用’.’表示可走的空间
/*这题的解题思路想的很好,突然有种山重水复疑无路,柳暗花明又一村的感觉,因为是把外围的及看的见的墙粉刷,所以只要判断外面的框格,若是'.'就遍历,并遇到旁边有'#'把全局变量加1,若是'#'就加1,但是在提交过程中还是遇到很多状况,像遍历,下标很容易越界,所以每次在遍历前先判断是否越界,要不然就是错误答案,若墙在角落里面就加2,但是不用想得这么复杂,下标直接从[0~m-1][0或n-1],[0或m-1][1~n-1]*/
#include<stdio.h>
#include<string.h>
char a[50][51];
int m,n,max;
void DFS(int i,int j)
{
a[i][j]='a';
if(i>=1&&a[i-1][j]=='.') DFS(i-1,j);
else if(i>=1&&a[i-1][j]=='#') max++;
if(i<=m-2&&a[i+1][j]=='.') DFS(i+1,j);
else if(i<=m-2&&a[i+1][j]=='#') max++;
if(j>=1&&a[i][j-1]=='.') DFS(i,j-1);
else if(j>=1&&a[i][j-1]=='#') max++;
if(j<=n-2&&a[i][j+1]=='.') DFS(i,j+1);
else if(j<=n-2&&a[i][j+1]=='#') max++;
}
int main()
{
register int i;
while(scanf("%d%d",&m,&n)!=EOF)
{
max=0;
for(i=0;i<m;i++)
scanf("%s",a[i]);
for(i=0;i<n;i++)
{
if(a[0][i]=='.') DFS(0,i);
else if(a[0][i]=='#') max++;
if(a[m-1][i]=='.') DFS(m-1,i);
else if(a[m-1][i]=='#') max++;
}
for(i=0;i<m;i++)
{
if(a[i][0]=='.') DFS(i,0);
else if(a[i][0]=='#') max++;
if(a[i][n-1]=='.') DFS(i,n-1);
else if(a[i][n-1]=='#') max++;
}
printf("%d/n",max);
}
return 0;
}