粉刷迷宫

来源:互联网 发布:网络借贷不还会怎么样 编辑:程序博客网 时间:2024/04/29 00:48

话说最近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;
}

 

原创粉丝点击