您的位置:首页 > 其它

Dijkstra的实现(用vector模拟邻接链表)

2013-03-22 22:53 337 查看
#include<stdio.h>
#include<vector>
usingnamespacestd;

structE{

intnext;//代表直接相邻的结点
intc;
};

vector<E>edge[101];//邻接链表
boolmark[101];
intDis[101];

intmain(){

intn,m;

while(scanf("%d%d",&n,&m)!=EOF){

if(m==0&&n==0)break;

for(inti=1;i<=n;i++)edge[i].clear();

inta,b,c;

while(m--){

scanf("%d%d%d",&a,&b,&c);

Etmp;

tmp.c=c;

tmp.next=b;

edge[a].push_back(tmp);

tmp.next=a;

edge[b].push_back(tmp);
}

for(inti=1;i<=n;i++){

Dis[i]=-1;

mark[i]=false;
}

Dis[1]=0;mark[1]=true;

intnewP=1;

for(inti=1;i<n;i++){

for(intj=0;j<edge[newP].size();j++){

intt=edge[newP][j].next;

intc=edge[newP][j].c;

if(mark[t]==true)continue;

if(Dis[t]==-1||Dis[t]>Dis[newP]+c)
//若该结点尚不可达,或者从新加入的结点经过一条边到达时比以往更近
Dis[t]=Dis[newP]+c;
}

intmin=123123123;

for(intj=1;j<=n;j++){

if(mark[j]==true)continue;

if(Dis[j]==-1)continue;

if(Dis[j]<min){

min=Dis[j];
newP=j;
}
}

mark[newP]=true;
}

printf("%d\n",Dis
);
}
return0;
}
以前只是用邻接矩阵实现过。。学习了。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: