单源最短路径问题(带权图)

一、问题

 带权有向图G(E,V), 找出从给定源顶点s到其它顶点v的权最小路径。

“最短路径” = 最小权

二、问题求解:

求1到5的最短路径值?



【代码实现】:

【我的代码】:    还挺好的吧。

写个代码模板,日后抄

#include 
#include 
#include 
#include 
#include
#include
#include
#include
#include
using namespace std;
#define INF 0x3f3f3f3f
#define LEN 210
int vis[LEN];       ///标记浏览过的,
int dis[LEN];           ///源点到当前点的距离
int w[LEN][LEN],n;
void init1()
{
   int i,j;
   for(i=0;idis[x]+w[x][j]){
                dis[j]=dis[x]+w[x][j];
             }
        }
        cout<>n>>line;                        ///输入点和边
    init1();
    for(i=0;i>a>>b>>d;                     ///输入各边的权值
        if(w[a][b]>d){
             w[a][b]=d;
        }
    }
    Dijkstra(1);                    ///调用方法
    ///输出1到5的最短路径
    cout<


【别人的代码】想看的就稍微看一下吧,学习她人精华,取其糟粕。


#include   
  
using namespace std;  
  
#define MAX 9999999  
  
#define LEN 210  
  
int map[LEN][LEN];    //某点到某点两点间的的距离  
  
int dist[LEN];              //记录当前点到源点的最短路径长度  
  
int mark[LEN];           //加入进来的点的集合  
  
   
  
//初始化map为正无穷大  
  
void init(){  
  
       int i,j;  
  
       for(i=0;idist[k]+map[k][j]){  
  
                            dist[j]=dist[k]+map[k][j];  
  
                     }  
  
              }  
  
       }  
  
}  
  
   
  
int main(){  
  
       int i,j,n,line;  
  
       int a,b,d;  
  
       cin>>n>>line;   //输入点和边  
  
       init();  
  
       for(i=0;i>a>>b>>d;  //输入各边的权值  
  
              if(map[a][b]>d){  
  
                     map[a][b]=map[b][a]=d;  
  
              }  
  
       }  
  
       myDijstra(n,1);//调用方法  
  
       //输出1到5的最短路径  
  
       cout<


你可能感兴趣的:(最短路径问题)