您的位置:首页 > 编程语言 > C语言/C++

c++ 深度优先算法走迷宫

2017-01-13 00:00 459 查看


c++ 深度优先算法走迷宫

将迷宫进行数据转换,0表示通路,1表示障碍物,9表示人;

1 1 1 1 1 1 1 1 1 1 1 1
9 0 0 0 0 0 0 1 0 0 0 1
1 1 1 0 1 1 1 1 0 1 0 1
1 0 1 0 1 1 1 1 0 1 0 1
1 0 1 0 0 0 0 0 0 1 0 1
1 0 0 0 0 1 1 1 1 1 1 1
1 1 1 0 0 1 1 1 1 1 0 1
1 0 0 0 0 0 0 0 0 0 0 1
1 1 1 1 1 0 1 1 0 1 1 1
1 0 0 0 0 0 1 1 0 1 1 1
1 0 0 0 1 0 0 1 0 0 0 0
1 1 1 1 1 1 1 1 1 1 1 1

代码如下:

yuanzhen@ubuntu:~/C_script$ cat dfs_migong.cpp
#include <iostream>
#include <vector>

using std::cout;
using std::endl;
using std::vector;

struct node
{
int x;
int y;
};

typedef struct node Node;
vector<Node> route(144);

vector<vector<int> > vec;
vector<vector<int> > book(12,vector<int>(12,0));
int dx=10, dy=11,min=999999999;
int next[4][4]={{-1,0},{0,-1},{1,0},{0,1}};

void show(vector<vector<int> > avec)
{
vector<vector<int> >::const_iterator cit;
vector<int>::const_iterator it;
for(cit=avec.begin(); cit!=avec.end();++cit)
{
vector<int> pvec = *cit;
for(it=pvec.begin();it!=pvec.end();++it)
cout << *it << " ";
cout << endl;
}
}
vector<vector<int> > block(int x1, int y1, int x2, int y2, vector<vector<int> >avec)
{
for(int i=x1;i<=x2;++i)
{
for(int j=y1;j<=y2;++j)
avec[i][j]=1;
}
return avec;
}
vector<vector<int> > init()
{
vector<vector<int> > avec(12, vector<int>(12,0));
for(int i=0;i<12;++i)
{
avec[i][0]=1;
avec[i][11]=1;
}
for(int j=0;j<12;++j)
{
avec[0][j]=1;
avec[11][j]=1;
}

avec[1][0]=0; //in
avec[10][11]=0; // out
avec[2][1]=1;
avec[2][2]=1;
avec[3][2]=1;
avec[4][2]=1;
avec[6][2]=1;
avec[6][1]=1;
avec[1][7]=1;

avec=block(2,4,3,7,avec);
avec=block(5,5,6,9,avec);
avec=block(8,1,8,4,avec);
avec=block(8,6,9,7,avec);
avec=block(8,9,9,10,avec);
avec=block(2,9,4,9,avec);
avec[5][10]=1;
avec[10][7]=1;
avec[10][4]=1;
//avec[5][2]=1;
//avec[9][4]=1;
return avec;
}

void move();

void dfs(int sx, int sy, int step)
{
if(sx==dx && sy==dy)
{
if (step < min)
{
min=step;
cout << min << endl;
for(int i=0;i<min;++i)
{
vec[route[i].x][route[i].y]=9;
//cout << route[i].x << " " << route[i].y << endl;
}
}
return ;
&nbs
7fe0
p; }

for(int i=0;i<4;++i)
{
int x=sx+next[i][0];
int y=sy+next[i][1];

if(x<0 || x>11 || y<0 || y>11)
continue;
if(vec[x][y]==0 && book[x][y]==0)
{
//cout << x << "\t" << y << endl;
book[x][y]=1;
route[step].x=x;
route[step].y=y;
dfs(x,y,step+1);
book[x][y]=0;
route[step].x=0;
route[step].y=0;
}
}
}

int main(void)
{
vec=init();
int sx=1;
int sy=0;
vec[sx][sy]=9;
vec[dx][dy]=0;

show(vec);
cout << "############################" << endl;
dfs(sx,sy,0);
show(vec);
}

###########################################################

运行结果:

20
1 1 1 1 1 1 1 1 1 1 1 1
9 9 9 9 0 0 0 1 0 0 0 1
1 1 1 9 1 1 1 1 0 1 0 1
1 0 1 9 1 1 1 1 0 1 0 1
1 0 1 9 0 0 0 0 0 1 0 1
1 0 0 9 0 1 1 1 1 1 1 1
1 1 1 9 0 1 1 1 1 1 0 1
1 0 0 9 9 9 9 9 9 0 0 1
1 1 1 1 1 0 1 1 9 1 1 1
1 0 0 0 0 0 1 1 9 1 1 1
1 0 0 0 1 0 0 1 9 9 9 9
1 1 1 1 1 1 1 1 1 1 1 1
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c++ 深度优先 dfs 迷宫