迪杰斯特拉:
#include <iostream>
#include <iostream>
#include<algorithm>
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<deque>
#include<queue>
#include<vector>
#include<stack>
using namespace std;
long long int logo[2100],dis[2100],sum,map1[2100][2100];
int prim(int n)
{
int i,j;
for(i=0;i<=n;i++)
{
dis[i]=0x3f3f3f3f;
logo[i]=0;
}
for(i=1;i<=n;i++)
dis[i]=map1[1][i];
logo[1]=1;
dis[1]=0;
for(i=1;i<n;i++)
{
int now=0x3f3f3f3f,min1=0x3f3f3f3f;
for(j=1;j<=n;j++)
{
if(dis[j]<min1&&logo[j]==0)
{
min1=dis[j];
now=j;
}
}
if(now==0x3f3f3f3f)
return 0;
logo[now]=1;
sum+=min1;
for(j=1;j<=n;j++)
{
if(logo[j]==0&&dis[j]>map1[now][j]+dis[now])
dis[j]=map1[now][j]+dis[now];
}
}
return 1;
}
int main()
{
int n,m,i,j;
while(scanf("%d%d",&n,&m)!=EOF)
{
memset(map1,0x3f3f3f3f,sizeof(map1));
sum=0;
for(i=0;i<m;i++)
{
int a,b,c;
cin>>a>>b>>c;
if(c<map1[a][b])
map1[a][b]=map1[b][a]=c;
}
<iostream>
#include <iostream>
#include<algorithm>
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<deque>
#include<queue>
#include<vector>
#include<stack>
using namespace std;
long long int logo[2100],dis[2100],sum,map1[2100][2100];
int prim(int n)
{
int i,j;
for(i=0;i<=n;i++)
{
dis[i]=0x3f3f3f3f;
logo[i]=0;
}
for(i=1;i<=n;i++)
dis[i]=map1[1][i];
logo[1]=1;
dis[1]=0;
for(i=1;i<n;i++)
{
int now=0x3f3f3f3f,min1=0x3f3f3f3f;
for(j=1;j<=n;j++)
{
if(dis[j]<min1&&logo[j]==0)
{
min1=dis[j];
now=j;
}
}
if(now==0x3f3f3f3f)
return 0;
logo[now]=1;
sum+=min1;
for(j=1;j<=n;j++)
{
if(logo[j]==0&&dis[j]>map1[now][j]+dis[now])
dis[j]=map1[now][j]+dis[now];
}
}
return 1;
}
int main()
{
int n,m,i,j;
while(scanf("%d%d",&n,&m)!=EOF)
{
memset(map1,0x3f3f3f3f,sizeof(map1));
sum=0;
for(i=0;i<m;i++)
{
int a,b,c;
cin>>a>>b>>c;
if(c<map1[a][b])
map1[a][b]=map1[b][a]=c;
}
prim(n);
for(int i=2;i<=n;i++)
cout<<dis[i]<<endl;
}
}
for(int i=2;i<=n;i++)
cout<<dis[i]<<endl;
}
}
SPFA:
#include <iostream>
#include <iostream>
#include<algorithm>
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<deque>
#include<queue>
#include<vector>
#include<stack>
using namespace std;
struct A{
long long int ed;
long long int power;
};
long long int logo[2110],dis[2110];
vector<A>v[2110];
void SPFA()
{
logo[1]=1;
dis[1]=0;
deque<long long int>p;
p.push_front(1);
while(!p.empty())
{
int u=p.front();
p.pop_front();
logo[u]=0;
for(int i=0;i<v[u].size();i++)
{
int x=v[u][i].ed,y=v[u][i].power;
if(dis[x]>dis[u]+y)
{
dis[x]=dis[u]+y;
if(logo[x]==0)
{
p.push_back(x);
logo[x]=1;
}
}
}
}
}
int main()
{
int n,m;
while(scanf("%d%d",&n,&m)!=EOF)
{
for(int i=0;i<2110;i++)
v[i].clear();
memset(dis,0x3f3f3f3f,sizeof(dis));
memset(logo,0,sizeof(logo));
int i,j;
for(i=0;i<m;i++)
{
long long int a,b,c;
A d;
cin>>a>>b>>c;
d.ed=b;
d.power=c;
v[a].push_back(d);
d.ed=a;
d.power=c;
v[b].push_back(d);
}
SPFA();
for(int i=2;i<=n;i++)
cout<<dis[i]<<endl;
}
}
<iostream>
#include <iostream>
#include<algorithm>
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<deque>
#include<queue>
#include<vector>
#include<stack>
using namespace std;
struct A{
long long int ed;
long long int power;
};
long long int logo[2110],dis[2110];
vector<A>v[2110];
void SPFA()
{
logo[1]=1;
dis[1]=0;
deque<long long int>p;
p.push_front(1);
while(!p.empty())
{
int u=p.front();
p.pop_front();
logo[u]=0;
for(int i=0;i<v[u].size();i++)
{
int x=v[u][i].ed,y=v[u][i].power;
if(dis[x]>dis[u]+y)
{
dis[x]=dis[u]+y;
if(logo[x]==0)
{
p.push_back(x);
logo[x]=1;
}
}
}
}
}
int main()
{
int n,m;
while(scanf("%d%d",&n,&m)!=EOF)
{
for(int i=0;i<2110;i++)
v[i].clear();
memset(dis,0x3f3f3f3f,sizeof(dis));
memset(logo,0,sizeof(logo));
int i,j;
for(i=0;i<m;i++)
{
long long int a,b,c;
A d;
cin>>a>>b>>c;
d.ed=b;
d.power=c;
v[a].push_back(d);
d.ed=a;
d.power=c;
v[b].push_back(d);
}
SPFA();
for(int i=2;i<=n;i++)
cout<<dis[i]<<endl;
}
}