题目:红黑问题
题意:一个满是方形瓷砖的房间里长宽分别为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;
}
本文介绍了一种通过深度优先搜索(DFS)算法解决红黑问题的方法。问题设定在一个由红色和黑色方砖组成的房间内,从指定的起点出发,仅能行走于黑色方砖上,目标是计算可以到达的黑色方砖总数。文中详细展示了如何利用递归DFS遍历所有可达路径,并通过标记已访问节点避免重复计算。
2937

被折叠的 条评论
为什么被折叠?



