zoukankan      html  css  js  c++  java
  • 最短路

    Spfa:

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cmath>
     4 #include<algorithm>
     5 #include<queue>
     6 using namespace std;
     7 const int maxn=100000+10,INF=-1u>>1;
     8 struct Tedge{int x,y,w,next;}adj[maxn*2];int fch[maxn],ms=0;
     9 void AddEdge(int u,int v,int w){
    10     adj[++ms]=(Tedge){u,v,w,fch[u]};fch[u]=ms;return;
    11 }
    12 bool vis[maxn];int dist[maxn],n,m;
    13 void SPFA(){
    14     queue<int>Q;memset(vis,false,sizeof(vis));
    15     for(int i=1;i<=n+1;i++)dist[i]=INF;dist[1]=0;
    16     Q.push(1);vis[1]=true;
    17     while(!Q.empty()){
    18         int u=Q.front();Q.pop();vis[u]=false;
    19         for(int i=fch[u];i;i=adj[i].next){
    20             int v=adj[i].y;
    21             if(dist[v]>dist[u]+adj[i].w){
    22                 dist[v]=dist[u]+adj[i].w;
    23                 if(!vis[v]) vis[v]=true,Q.push(v);
    24             }
    25         }
    26     } return ;
    27 }
    28 inline int read(){
    29     int x=0,sig=1;char ch=getchar();
    30     while(!isdigit(ch)){if(ch=='-') sig=-1;ch=getchar();}
    31     while(isdigit(ch)) x=10*x+ch-'0',ch=getchar();
    32     return x*=sig;
    33 }
    34 inline void write(int x){
    35     if(x==0){putchar('0');return;}if(x<0) putchar('-'),x=-x;
    36     int len=0,buf[15];while(x) buf[len++]=x%10,x/=10;
    37     for(int i=len-1;i>=0;i--) putchar(buf[i]+'0');return;
    38 }
    39 void init(){
    40     n=read();m=read();int a,b,c;
    41     for(int i=1;i<=m;i++){
    42         a=read();b=read();c=read();
    43         AddEdge(a,b,c);//printf("-AddEdge-%d %d %d
    ",k,j,c);
    44     } return;
    45 }
    46 void work(){
    47     SPFA();
    48     //for(int i=1;i<=ms;i++)printf("-Edge- %d to %d is %d
    ",adj[i].x,adj[i].y,adj[i].w);
    49     //for(int i=1;i<=n+1;i++) printf("dist[%d]=%d
    ",i,dist[i]);
    50     return;
    51 }
    52 void print(){
    53     if(dist[n+1]>=INF) puts("No Answer.");
    54     else write(dist[n+1]),putchar('
    ');
    55     return;
    56 }
    57 int main(){
    58     init();work();print();return 0;
    59 }
  • 相关阅读:
    【代码笔记】iOS-判断textField里面是否有空
    【代码笔记】iOS-判断字符串是否为空
    【代码笔记】iOS-判断中英文混合的字符长度的两种方法
    【代码笔记】iOS-判断有无网络
    【代码笔记】iOS-判断是否是iPhone5
    iOS动画-扩散波纹效果
    (转)对称加密与非对称加密,以及RSA的原理
    (转)iOS GPUImage研究总结
    @inerface的11条规范写法
    Python开发之路
  • 原文地址:https://www.cnblogs.com/chxer/p/4436108.html
Copyright © 2011-2022 走看看