您的位置:首页 > 其它

回溯算法之迷宫问题

2012-10-24 19:30 316 查看
题意:

迷宫问题,大家都懂的

#include<iostream>
#include<stdio.h>
#include<stack>
#include<string.h>
using namespace std;
#define max 1000
int map[max][max];
int visit[max][max];
int row,col;
int sx,sy,ex,ey;
typedef struct node
{
int x;
int y;
int step;
int dir;
} position;
stack<struct node> stack2;
int dir[4][2]={0,1,1,0,0,-1,-1,0};
int mazePath()
{
position cur;
cur.x=sx;
cur.y=sy;
cur.step=0;
cur.dir=0;
do
{
if((cur.x>=0&&cur.x<row)&&(cur.y>=0&&cur.y<col)&&visit[cur.x][cur.y]==1)
{
stack2.push(cur);
visit[cur.x][cur.y]=0;
if(cur.x==ex&&cur.y==ey)
return 1;
cur.x=cur.x+dir[0][0];
cur.y=cur.y+dir[0][1];
cur.step++;
cur.dir=0;
}
else
{
position testpos=stack2.top();
stack2.pop();
while(testpos.dir==3)
{
testpos=stack2.top();
stack2.pop();
visit[testpos.x][testpos.y]=1;
}
if(testpos.dir<3)
{
testpos.dir++;
stack2.push(testpos);
cur.x=testpos.x+dir[testpos.dir][0];
cur.y=testpos.y+dir[testpos.dir][1];
}
}
}while(!stack2.empty());
return 0;
}
void printPath()
{
stack<position> stack1;
while(!stack2.empty())
{
stack1.push(stack2.top());
stack2.pop();
}
while(!stack1.empty())
{
position q=stack1.top();
stack1.pop();
printf("%d %d\n",q.x,q.y);
}
}
int main()
{
scanf("%d%d",&row,&col);
for(int i=0;i<max;i++)
{
for(int j=0;j<max;j++)
visit[i][j]=1;
}
for(int i=0;i<row;i++)
{
for(int j=0;j<col;j++)
scanf("%d",&visit[i][j]);
}
scanf("%d%d%d%d",&sx,&sy,&ex,&ey);
if(mazePath())
printPath();
else printf("no path\n");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: