1003 Dijkstra算法
#include<stdio.h>
#include<string.h>
#define MAXVEX 100 // 定義的最大定點(diǎn)數(shù)
#define INFINITY 65535 //定義一個(gè)極大數(shù)
int final[MAXVEX];//為1即代表當(dāng)前坐標(biāo)的最短路徑已經(jīng)找到
int map[MAXVEX][MAXVEX];//代表權(quán)值
int m,n;//分別表示幾個(gè)城市
int num[MAXVEX];//最短路徑條數(shù)
int team[MAXVEX];//可集結(jié)的最多救援隊(duì)數(shù)量
int dis[MAXVEX];//存放所有結(jié)點(diǎn)的權(quán)值
int city[MAXVEX];//代表救援隊(duì)的數(shù)目
int c1,c2;//初始結(jié)點(diǎn)和目標(biāo)結(jié)點(diǎn)
int main()
{
void Dijkstra();
scanf("%d %d %d %d",&m,&n,&c1,&c2); //m代表城市數(shù)量,n代表路數(shù)量
memset(final,0,n);//將所有節(jié)點(diǎn)設(shè)置為未被訪問(wèn)
for(int i=0;i<m;++i)
{
scanf("%d",&city[i]);//給城市數(shù)量的救援人數(shù)賦值
}
for(int i=0;i<m;++i)
{
for(int j=0;j<m;++j)
{
//給每條路賦權(quán)值,注意是所有路都賦極大值INFINITY
map[i][j] = INFINITY;
}
}
for(int i=0;i<n;++i)//給n條路設(shè)定值
{
int start,end,length;// 起點(diǎn),終點(diǎn),起點(diǎn)到終點(diǎn)的權(quán)值
scanf("%d %d %d",&start,&end,&length);
map[start][end] = length;
map[end][start] = length;//雙向賦值
}
Dijkstra();
printf("%d %d",num[c2],team[c2]);
return 0;
}
void Dijkstra(){
int ct;//設(shè)置一個(gè)中間節(jié)點(diǎn)
for(int i=0;i<m;++i){
//把到?jīng)]個(gè)結(jié)點(diǎn)的權(quán)值都存放入數(shù)組中
dis[i] = map[c1][i];//從c1開(kāi)始
}
memset(num,0,m);//給m個(gè)結(jié)點(diǎn)的最短路徑條數(shù)都初始化為0
memset(team,0,m);//給m個(gè)結(jié)點(diǎn)的救援人員總數(shù)量都初始化為0
num[c1] = 1;//表示c1這個(gè)節(jié)點(diǎn)的路徑為1
dis[c1] = 0;//到c1的權(quán)值為0;
team[c1] = city[c1];
ct = -1;//將中間結(jié)點(diǎn)賦值為-1做標(biāo)記
while(c1!=c2){
int min = INFINITY;//設(shè)置一個(gè)最小距離值
for(int i=0;i<m;++i)
{
if(!final[i]&&dis[i]<min){
min = dis[i];
ct = i;//此ct相當(dāng)于【大話數(shù)據(jù)結(jié)構(gòu)】dijastra算法中的k
}
}
final[ct] = 1;//表示當(dāng)前結(jié)點(diǎn)的最短路徑已經(jīng)求得
for(int i=0;i<m;++i) {//這個(gè)循環(huán)尤其重要,用來(lái)修正路徑權(quán)值 *****************************
if(!final[i]){
if(dis[i]>min+map[ct][i]){
dis[i] = min + map[ct][i];
team[i] = city[i]+team[ct];
num[i] = num[ct];
} else if(dis[i] == min + map[ct][i])
{
num[i] = num[i] + num[ct];
if(team[i]<team[ct]+city[i])
team[i] = team[ct] + city[i];
}
}
}
}
}
轉(zhuǎn)載于:https://www.cnblogs.com/purpleone/p/10822421.html
總結(jié)
以上是生活随笔為你收集整理的1003 Dijkstra算法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 前端的百度地图的api的使用
- 下一篇: microsoft 官方学习资源