无向图邻接表怎么建,求指点!! HDU 2544 最短路—ijkstra、结题报告 精简版!)
转载请注明出自cxb569262726:http://write.blog.csdn.net/postedit
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=2544
代码:
#include<iostream>#include<algorithm>#include<stdio.h>#include<stdlib.h>#include<string.h>#include<queue>#include<math.h>#include<vector>#define MAXN 10005#define INF 100000000using namespace std;typedef pair<int,int> pii;int used[105],d[105],u[MAXN*2],v[MAXN*2],w[MAXN*2],next[MAXN*2],first[MAXN];int main(){ int i,j,n,m,t,a,b,c; while(scanf("%d%d",&n,&m)!=EOF && (n||m)) { priority_queue<pii,vector<pii>,greater<pii> > q; memset(used,0,sizeof(used)); memset(first,-1,sizeof(first)); for(i=0;i<2*m;i+=2)//本来是i++的,无向图我改了 { scanf("%d%d%d",&u[i],&v[i],&w[i]); next[i]=first[u[i]]; first[u[i]]=i; w[i+1]=w[i];v[i+1]=u[i];u[i+1]=v[i];//相应的起点终点权值 next[i+1]=first[u[i+1]]; first[v[i]]=i+1;//多加条边 } d[1]=0; for(i=2;i<=n;i++) d[i]=INF; q.push(make_pair(d[1],1)); while(!q.empty()) { pii z=q.top(); q.pop(); int x=z.second; if(used[x]) continue; used[x]=1; for(i=first[x];i!=-1;i=next[i]) if(d[v[i]]>d[x]+w[i]) { d[v[i]]=d[x]+w[i]; q.push(make_pair(d[v[i]],v[i])); } } printf("%d\n",d[n]); } return 0;}
- 1楼cxb569262726昨天 01:43
- 明天要早起。。。睡觉了!