#include<iostream>
#include<queue>
#define max 1001
using namespace std;
int map[max][max];
bool visited[max];
int num;
struct node
{
int value;
node * pre;
};
int getFirst(int v)
{
int i=0;
for(i=1;i<num;i++)
{
if(map[i][v]!=0)
{
return i;
}
}
return 0;
}
//i是以谁为节点
//v是访问过的个节点
//求下一个节点
int getNext(int i,int v)
{
int j=0;
j=v+1;
for(;j<=num;j++)
{
j=j;
if(map[i][j]!=0)
{
return j;
}
}
return 0;
}
void clearvisited()
{
int i=0;
for(i=1;i<=num;i++)
{
visited[i]=false;
}
}
void bfs(int s,int end,queue<node *> & que)
{
node * tail;
visited[s]=true;
node * front = new node();
front->value=s;
front->pre=NULL;
que.push(front);
bool found =false;
while(!que.empty())
{
if(found) break;
node* temp =que.front();
// cout<<temp->value<<" ";
que.pop();
int i=1;
int j=temp->value;
for(i=getFirst(j);i!=0;)
{
if(!visited[i])
{
node * t = new node();
t->value=i;
t->pre=temp;
visited[i]=true;
que.push(t);
if(i==end)
{
tail=t;
found=true;
break;
}
}
if(i==7)
i=7;
i=getNext(j,i);
}
}
while(tail!=NULL)
{
cout<<tail->value<<" ";
tail=tail->pre;
}
clearvisited();
}
void m(int a,int b)
{
map[a][b]=1;
map[b][a]=1;
}
int main()
{
cin>>num;
int row;
cin>>row;
int i=0;
while(i<row)
{
int a,b;
cin>>a;
cin>>b;
map[a][b] =1;
map[b][a]=1;
i++;
}
while(1)
{
int s,e;
cout<<"输入A到B"<<endl;
cin>>s;
cin>>e;
queue<node*> que;
bfs(s,e,que);
cout<<endl;
}
return 0;
}
基于广度搜索的最短路路径
最新推荐文章于 2023-02-18 18:57:09 发布