hiho刷题日记——第二十三天最短路径·一

来源:互联网 发布:淘宝csv数据怎么制作 编辑:程序博客网 时间:2024/05/20 00:13

题目

给一个无向有权(距离)图,求两点之间最小距离。

思路

根据给出的数据建立有个无向图。
从出发点开始深度遍历便可。遍历的时候得出出发点到遍历到的点的最短路径。便可得出答案。

代码

#include<cstdio>#include<cstring>using namespace std;const int MAXN=1000+1;const int MAXM=10000+1;int N,M,S,T,head[MAXN],e=0;int ans[MAXN];struct EDGE{    int v,next,cost;}edge[MAXM<<1];void addEdge(int x,int y,int z){    edge[e].v=y;    edge[e].cost=z;    edge[e].next=head[x];    head[x]=e++;}void dfs(int x){    if(x==T) return;    for(int p=head[x];p!=-1;p=edge[p].next)    if(ans[edge[p].v]==-1 || ans[x]+edge[p].cost<ans[edge[p].v])    {        ans[edge[p].v]=ans[x]+edge[p].cost;        dfs(edge[p].v);    }}int main(){    memset(head,-1,sizeof(head));    memset(ans,-1,sizeof(ans));    scanf("%d%d%d%d",&N,&M,&S,&T);    int a,b,c;    while(M--)    {        scanf("%d%d%d",&a,&b,&c);        addEdge(a,b,c);        addEdge(b,a,c);    }    ans[S]=0;    dfs(S);     printf("%d",ans[T]);    return 0;}
0 0
原创粉丝点击