2个回答
展开全部
这个是我写的一个迷宫最短路径的一个例子:广搜
#include<stdio.h>
#include<queue>
using namespace std;
struct node
{
int x,y;
};
int map[5][5],vis[5][5];
node root[30];
int rn,f;
int dir[4][2]={-1,0,0,1,1,0,0,-1};
void bfs(int i,int j)
{
node cur,next;
queue<node>q;
cur.x=i;
int k;
cur.y=j;
memset(vis,-1,sizeof(vis));
vis[i][j]=0;
q.push(cur);
while(!q.empty())
{
cur=q.front();
q.pop();
for(k=0;k<4;k++)
{
next.x=cur.x+dir[k][0];
next.y=cur.y+dir[k][1];
if(next.x>=0&&next.x<5&&next.y>=0&&next.y<5)
{
if(map[next.x][next.y]==1) continue;
if(vis[next.x][next.y]==-1)
{
vis[next.x][next.y]=vis[cur.x][cur.y]+1;
q.push(next);
}
}
}
}
}
void dfs(int i,int j)
{
root[rn].x=i;
root[rn].y=j;
rn++;
if(i==0&&j==0)
{
f=1;
return;
}
int k,ii,jj;
for(k=0;k<4;k++)
{
ii=i+dir[k][0];
jj=j+dir[k][1];
if(ii>=0&&ii<5&&jj>=0&&jj<5)
{
if(vis[ii][jj]==(vis[i][j]-1))
dfs(ii,jj);
}
if(f)
return;
}
}
int main()
{
int i,j;
for(i=0;i<5;i++)
for(j=0;j<5;j++)
scanf("%d",&map[i][j]);
bfs(0,0);
rn=0;
f=0;
dfs(4,4);
for(i=rn-1;i>=0;i--)
{
printf("(%d, %d)\n",root[i].x,root[i].y);
}
return 0;
}
#include<stdio.h>
#include<queue>
using namespace std;
struct node
{
int x,y;
};
int map[5][5],vis[5][5];
node root[30];
int rn,f;
int dir[4][2]={-1,0,0,1,1,0,0,-1};
void bfs(int i,int j)
{
node cur,next;
queue<node>q;
cur.x=i;
int k;
cur.y=j;
memset(vis,-1,sizeof(vis));
vis[i][j]=0;
q.push(cur);
while(!q.empty())
{
cur=q.front();
q.pop();
for(k=0;k<4;k++)
{
next.x=cur.x+dir[k][0];
next.y=cur.y+dir[k][1];
if(next.x>=0&&next.x<5&&next.y>=0&&next.y<5)
{
if(map[next.x][next.y]==1) continue;
if(vis[next.x][next.y]==-1)
{
vis[next.x][next.y]=vis[cur.x][cur.y]+1;
q.push(next);
}
}
}
}
}
void dfs(int i,int j)
{
root[rn].x=i;
root[rn].y=j;
rn++;
if(i==0&&j==0)
{
f=1;
return;
}
int k,ii,jj;
for(k=0;k<4;k++)
{
ii=i+dir[k][0];
jj=j+dir[k][1];
if(ii>=0&&ii<5&&jj>=0&&jj<5)
{
if(vis[ii][jj]==(vis[i][j]-1))
dfs(ii,jj);
}
if(f)
return;
}
}
int main()
{
int i,j;
for(i=0;i<5;i++)
for(j=0;j<5;j++)
scanf("%d",&map[i][j]);
bfs(0,0);
rn=0;
f=0;
dfs(4,4);
for(i=rn-1;i>=0;i--)
{
printf("(%d, %d)\n",root[i].x,root[i].y);
}
return 0;
}
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询