前言
简单的深搜,难的做不出,简单的总出错,太搞了。
一、分析
题目大意:就是说一个房间里有黑色和红色两种方块,人只能站在黑块上,然后只能朝四个方向走,计算能够到达的黑色方块总数,和油田问题很像,直接深搜。
二、代码
代码如下(示例):
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int n, m;
char a[20][20];
int sum=0;
int dir[4][2]={{1,0},{-1,0},{0,1},{0,-1}};
int check(int x,int y)//检查是否能走
{
if(x >= 0 && x < m && y >= 0 && y < n && a[x][y] =='.')
return 1;
else
return 0;
}
int xx,yy;
void dfs(int x, int y)
{int i;
if(check(x,y)==1)
{
a[x][y] = '#';
sum++;
}
else
return;
for( i = 0; i < 4; i++)//分别向四个方向搜索
{
xx = x +dir[i][0];
yy = y +dir[i][1];
if(a[xx][yy]=='.')
{
dfs(xx,yy);
}
}
}
int main()
{
int x=0,y=0;
int i,j;
while(scanf("%d%d\n",&n, &m))//这里要加换行符,不然会判错
{
if(m==0&&n==0)
break;
for( i=0; i<m; i++)
{
for( j=0; j<n; j++)
{
scanf("%c",&a[i][j]);
if(a[i][j]=='@')//所站的位置--起点
{
x = i;
y = j;
}
}
getchar();//存储输入下一行时所按的回车键
}
a[x][y] = '.';
dfs(x,y);//进行深搜,将sum算出来
printf("%d\n",sum);
sum=0;//置0进行下一次
}
return 0;
}