zoukankan      html  css  js  c++  java
  • 1381:城市路(Dijkstra)

    地址:http://ybt.ssoier.cn:8088/problem_show.php?pid=1381

    邻接表代码(Bellman_Ford):

     1 #include<bits/stdc++.h>
     2 #define INF 0x3f3f3f3f
     3 using namespace std;
     4 
     5 int n,m;
     6 bool vis[2005];//访问标记 
     7 int dis[2005];//最短距离
     8 struct node{
     9     int v;
    10     int d;
    11 };
    12 vector<node> adj[2005];//图(邻接表) 
    13 
    14 void Bellman_Ford(int s){//核心代码
    15 //  for(int i=0;i<n;i++){
    16 //    dis[i]=INF;
    17 //    }
    18     memset(dis,0x3f,sizeof(dis));
    19     dis[s]=0;
    20     for(int i=0;i<n-1;i++){
    21         bool check=0;
    22         for(int j=1;j<=n;j++){
    23             for(int k=0;k<adj[j].size();k++){
    24                 int v=adj[j][k].v;
    25                 int d1=adj[j][k].d;
    26                 if(dis[v]>dis[j]+d1){
    27                     dis[v]=dis[j]+d1;
    28                     check=1;
    29                 }
    30             }
    31         }
    32         if(check==0) break;
    33     }
    34 }
    35                                                                                                                                                  
    36 int main(){
    37     cin>>n>>m;
    38 //    scanf("%d%d", &n, &m);
    39     for(int i=1;i<=m;i++){
    40         int a,b;
    41         int c;
    42         cin>>a>>b>>c;
    43 //        scanf("%d%d%d",&a,&b,&c);
    44         node temp;
    45         temp.v=b;
    46         temp.d=c;
    47         adj[a].push_back(temp);
    48         temp.v=a;
    49         temp.d=c;
    50         adj[b].push_back(temp);
    51     } 
    52 //    for(int i=1;i<=n;i++){
    53 //        cout<<i<<':';
    54 //        for(int j=0;j<adj[i].size();j++){
    55 //            cout<<adj[i][j].v<<'('<<adj[i][j].d<<')'<<" ";
    56 //        }
    57 //        cout<<endl;
    58 //    }
    59     Bellman_Ford(1);
    60     cout<<dis[n];
    61 //    printf("%d",dis[n]);
    62     return 0;
    63 }

    邻接表代码(Dijkstra):

     1 #include<bits/stdc++.h>
     2 #define INF 0x3f3f3f3f
     3 using namespace std;
     4 
     5 int n,m;
     6 bool vis[2005];//访问标记 
     7 int dis[2005];//最短距离
     8 
     9 struct node{
    10     int v,d;
    11 };
    12 vector<node> adj[2005];//图(邻接表) 
    13 
    14 void Dijkstra(int s){//核心代码
    15     for(int i=1;i<=n;i++){
    16         dis[i]=INF;
    17     }
    18     dis[s]=0;
    19     for(int i=1;i<=n;i++){
    20         int u=-1,MIN=INF;
    21         for(int j=1;j<=n;j++){
    22             if(vis[j]==0 && dis[j]<MIN){
    23                 u=j;
    24                 MIN=dis[j];
    25             }
    26         }
    27         if(u==-1) return;
    28         vis[u]=1;
    29         for(int j=0;j<adj[u].size();j++){
    30             int v=adj[u][j].v;
    31             if(vis[v]==0 && dis[u]+adj[u][j].d<dis[v]){
    32                 dis[v]=dis[u]+adj[u][j].d;
    33             }
    34         }
    35     }
    36 }
    37 
    38 int main(){
    39     cin>>n>>m;
    40     for(int i=1;i<=m;i++){
    41         int a,b,c;
    42         cin>>a>>b>>c;
    43         node temp;
    44         temp.v=b;
    45         temp.d=c;
    46         adj[a].push_back(temp);
    47         temp.v=a;
    48         temp.d=c;
    49         adj[b].push_back(temp);
    50     } 
    51 //    for(int i=1;i<=n;i++){
    52 //        cout<<i<<':';
    53 //        for(int j=0;j<adj[i].size();j++){
    54 //            cout<<adj[i][j].v<<'('<<adj[i][j].d<<')'<<" ";
    55 //        }
    56 //        cout<<endl;
    57 //    }
    58     Dijkstra(1);
    59     if(dis[n]==INF) cout<<-1;
    60     else cout<<dis[n];
    61     return 0;
    62 }

    邻接矩阵代码(Dijkstra):

     1 #include<bits/stdc++.h>
     2 #define INF 0x3f3f3f3f
     3 using namespace std;
     4 
     5 int n,m;
     6 int mp[2005][2005];//图(邻接矩阵) 
     7 bool vis[2005];//访问标记 
     8 int dis[2005];//最短距离 
     9 
    10 void Dijkstra(int s){//核心代码 
    11     memset(dis,0x3f,sizeof(dis));
    12     dis[s]=0;
    13     for(int i=1;i<=n;i++){
    14         int u=-1,MIN=INF;
    15         for(int j=1;j<=n;j++){
    16             if(vis[j]==0 && dis[j]<MIN){
    17                 u=j;
    18                 MIN=dis[j];
    19             }
    20         }
    21         if(u==-1) return;
    22         vis[u]=1;
    23         for(int v=1;v<=n;v++){
    24             if(vis[v]==0 && mp[u][v]!=INF && dis[u]+mp[u][v]<dis[v]){
    25                 dis[v]=dis[u]+mp[u][v];
    26             }
    27         }
    28     }
    29 }
    30 
    31 int main(){
    32     memset(mp,0x3f,sizeof(mp));
    33     cin>>n>>m;
    34     for(int i=1;i<=m;i++){
    35         int a,b,c;
    36         cin>>a>>b>>c;
    37         mp[a][b]=min(c,mp[a][b]);
    38         mp[b][a]=min(c,mp[a][b]);
    39     }
    40     for(int i=1;i<=n;i++){
    41         mp[i][i]=0;
    42     } 
    43 //    for(int i=1;i<=n;i++){
    44 //        for(int j=1;j<=n;j++){
    45 //            if(mp[i][j]!=INF) cout<<mp[i][j]<<" ";
    46 //            else cout<<'-'<<" ";
    47 //        }
    48 //        cout<<endl;
    49 //    }
    50     Dijkstra(1);
    51     if(dis[n]!=INF) cout<<dis[n];
    52     else cout<<-1;
    53     return 0;
    54 }
  • 相关阅读:
    内部类
    this关键字
    封装
    构造方法
    类图
    StringBuffer
    String
    导包
    包名规范
    带参数的方法
  • 原文地址:https://www.cnblogs.com/Wag-Ho/p/14640241.html
Copyright © 2011-2022 走看看