是一样的,建图的时候建双向边就是了,其余相同
#include
#include
#include
#include
using namespace std;
struct node
{
int t[1000],size,v[1000];
};
queue
node f[10000];
int dis[10000];
int n,start,target;
void readdata()
{
int x,y,z;
scanf("%d%d%d",&n,&start,&target);
for(int i=1;i<=n;i++)
{
scanf("%d%d%d",&x,&y,&z);
f[x].size++;
f[x].t[f[x].size]=y;
f[x].v[f[x].size]=z;
f[y].size++;
f[y].t[f[y].size]=x;
f[y].v[f[y].size]=z;
}
for(int i=1;i<=10000;i++)dis[i]=2000000000;
dis[start]=0;
}
void spfa()
{
int x;
q.push(start);
while(q.empty()==false)
{
x=q.front();
q.pop();
for(int i=1;i<=f[x].size;i++)
{
if(dis[f[x].t[i]]>dis[x]+f[x].v[i])
{
dis[f[x].t[i]]=dis[x]+f[x].v[i];
q.push(f[x].t[i]);
}
}
}
cout<
int main()
{
freopen("spfa.in","r",stdin);
freopen("spfa.out","w",stdout);
readdata();
spfa();
return 0;
}
我没测过,spfa大致是这样
无向图可以理解为全部弧都是双向的有向图,图论基础……
单源最短路径基本都是拿来处理有向图的,能处理有向图就能处理无向图。