题目:红黑问题
题意:一个满是方形瓷砖的房间里长宽分别为H,W(长款不超过20),瓷砖颜色只有黑(-)和红(#)两种颜色,一个人站在房间的某个位置@,只能走黑色瓷砖,求可走瓷砖数
思路:只有四个方向可走,初始化坐标增量代表四个方向,
每走一步判断当前位置是否还在房间内,判断是否为黑瓷砖,
为了避免死循环,判断是否走过
感想:注意题目中H,W不超过20,只有黑色可走。
代码:
#include <iostream>
#include<string.h>
using namespace std;
int d[4][2]={{0,1},{0,-1},{-1,0},{1,0}};
int v[20][20];
char m[20][20];
int sum=0;
void DFS(int x,int y)
{
int nx,ny;
for(int i=0;i<4;i++)
{
nx=x+d[i][0];
ny=y+d[i][1];
{
if(nx>=0&&nx<m&&ny>=0&&ny<n)
{
if(v[nx][ny]==0)
{
v[nx][ny]=1;
sum++;
DFS(nx,ny);
}
}
}
}
}
int main()
{
int x,y;
int m,n;
while(cin>>n>>m)
{
if(m==0||n==0)
break;
for(int i=0;i<m;i++)
for(int j=0;j<n;j++)
{
cin>>m[i][j];
if(m[i][j]=='@')
{
x=i;
y=j;
}
}
memset(v,0,sizeof(v));
sum=1;
DFS(x,y);
cout<<sum<<endl;
}
return 0;
}