版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zzuli_Acmer/article/details/84304376
一个简单的DFS。。。
因为只是算法解析,所以需要手动输入
代码中m代表行,n代表列
mapp为地图
a为标记数组
point是点的坐标
#include <iostream>
#include<bits/stdc++.h>
using namespace std;
int mapp[101][101];
int m,n;
int sum = 0;
int a[101][101];
int xx[4] = {1,0,-1,0};
int yy[4] = {0,1,0,-1};
struct point
{
int x;
int y;
};
stack<point> st;
void dfs(int x,int y)
{
if((int)st.size() == sum)
{
while(!st.empty())
{
point tt = st.top();
cout<<tt.x<<" "<<tt.y<<endl;
st.pop();
}
return;
}
a[x][y] = 1;
for(int i=0; i<4; i++)
{
int x1= x+xx[i];
int y1 = y+yy[i];
if(x1>=0 && x1<=n &&y1>=0 && y1<=m && a[x1][y1] == 0 && mapp[x1][y1]==1)
{
point p;
p.x = x1;
p.y = y1;
st.push(p);
dfs(x1,y1);
a[x1][y1]=0;
if(!st.empty())
st.pop();
}
}
}
int main()
{
int x,y;
memset(mapp,0,sizeof(mapp));
scanf("%d%d",&m,&n);
for(int i=1; i<=m; i++)
for(int j=1; j<=n; j++)
{
scanf("%d",&mapp[i][j]);
if(mapp[i][j] == 2)
{
x=i;
y=j;
}
if(mapp[i][j]!=0)
sum++;
}
point tt ;
tt.x = x;
tt.y = y;
st.push(tt);
memset(a,0,sizeof(a));
a[x][y] = 1;
dfs(x,y);
return 0;
}
栈st用来存放路径
输入数据时,用0表示空地,1表示路径,2表示七点
下面是一个输出样例,路径从下往上读