求图中的最长路,深搜水题
代码:
#include <iostream>
#include <cstdio>
using namespace std;
char room[25][25];//用矩阵储存每个点
int p[4][2] = {{1,0},{0,1},{-1,0},{0,-1}};//表示上、下、左、右四个方向
int num;//所求的最长长度
int w,h;//表示矩阵的长和宽
//用深搜记录最长路径
void dfs(int x,int y)
{
num++;//长度加1
room[x][y]='#';
//分别向四个方向进行深搜
for(int i=0;i<4;i++)
{
int a=x+p[i][0];
int b=y+p[i][1];
if(a<h&&b<w&&a>=0&&b>=0&&room[a][b]=='.')
dfs(a,b);
}
return ;
}
int main()
{
//int w,h;//表示矩阵的长和宽
int x,y;//@所在的位置
for(;;)
{
cin>>w>>h;
if(w==0&&h==0) break;
for(int i=0;i<h;i++)
{
for(int j=0;j<w;j++)
{
cin>>room[i][j];
if(room[i][j]=='@')
{
x=i;
y=j;
}
}
getchar();
}
num=0;
dfs(x,y);
cout<<num<<endl;
}
return 0;
}