转载自:1.July http://blog.csdn.net/v_JULY_v/article/details/6126406
6、寻找迷宫的一条出路(o:通路; X障碍)
char Maze[MAX_SIZE][MAX_SIZE] = {{'X','X','X','X','X','X','X','X'},
{'o','o','o','o','o','X','X','X'},
{'X','o','X','X','o','o','o','X'},
{'X','o','X','X','o','X','X','o'},
{'X','o','X','X','X','X','X','X'},
{'X','o','X','X','o','o','o','X'},
{'X','o','o','o','o','X','o','o'},
{'X','X','X','X','X','X','X','X'}};
以上的内容转载自July,以下是自己的解法:
采用了深度优先遍历的策略:
#define MAX_SIZE 8
char Map[MAX_SIZE][MAX_SIZE] = {{'X','X','X','X','X','X','X','X'},
{'o','o','o','o','o','X','X','X'},
{'X','o','X','X','o','o','o','X'},
{'X','o','X','X','o','X','o','o'},
{'X','o','X','X','X','X','X','X'},
{'X','o','X','X','o','o','o','X'},
{'X','o','o','o','o','X','o','o'},
{'X','X','X','X','X','X','X','X'}};
struct Direction
{
int bottom;
int right;
int top;
};
struct POINT_1
{
POINT_1(int x,int y,int z)
{
this->x=x;
this->y=y;
this->z=z;
}
int x;
int y;
int z;
};
struct Direction direction[MAX_SIZE][MAX_SIZE];
void DFS(int i,int j,std::vector<POINT_1> col)
{
if((i==MAX_SIZE-1||j==MAX_SIZE-1)&&i!=1&&j!=0)
{
cout<<"有以下的一条路径:"<<endl;
std::vector<POINT_1>::iterator iter=col.begin();
for(;iter!=col.end();iter++)
cout<<"("<<(*iter).x<<","<<iter->y<</*"--"<<iter->z<<*/") "<<"--->";
cout<<endl;
}
else
{
if(j+1<=MAX_SIZE-1&&Map[i][j+1]=='o'&&direction[i][j+1].right==0)//右边可以走
{
direction[i][j+1].right=1;
col.push_back(POINT_1(i,j+1,0));
DFS(i,j+1,col);
col.pop_back();
}
if(i+1<=MAX_SIZE-1&&Map[i+1][j]=='o'&&direction[i][j+1].bottom==0)//下面可以走
{
direction[i+1][j].bottom=1;
col.push_back(POINT_1(i+1,j,0));
DFS(i+1,j,col);
col.pop_back();
}
if(i-1>=0&&Map[i-1][j]=='o'&&direction[i-1][j].top==0)//上面
{
direction[i-1][j].top=1;
col.push_back(POINT_1(i-1,j,0));
DFS(i-1,j,col);
col.pop_back();
}
}
}
int main()
{
std::vector<POINT_1> col;
col.push_back(POINT_1(1,0,0));
DFS(1,0,col);
return 0;
}
补充:以上的代码中没有搜索左边的路径,所以需要搜索一下左边的情况也得考虑进去。