读书人

无向图邻接表如何建求指点! HDU

发布时间: 2012-09-14 11:53:44 作者: rapoo

无向图邻接表怎么建,求指点!! 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
明天要早起。。。睡觉了!

读书人网 >编程

热点推荐