C C 最短路徑

2022-02-28 12:08:22 字數 2565 閱讀 6359

用book陣列的值表示路徑長度即可,省略

#includeusing namespace std;

const int inf = 0x3f3f3f3f;

const int maxn = 105;

int graph[maxn][maxn];

void floyd(int n)

int main()

floyd(n);

}return 0;

}

#includeusing namespace std;

const int inf = 0x3f3f3f3f;

const int maxn = 5e3 + 10;

struct edge e[maxn*2];

int pre[maxn],d[maxn];//pre存放前置節點,d[i]存放s到點i的距離

void print_path(int s, int t)//列印s到t的最短路徑

}void bellman(int n, int cnt)

}printf("%d\n",d[n]);//列印s到n的最短距離

print_path(s,n);

printf("\n");

}int main()

bellman(n,cnt);

}return 0;

}

bool bellman(int n, int cnt)}}

printf("%d\n",d[n]);//列印s到n的最短距離

print_path(s,n);

printf("\n");

return true;

}

//基於鄰接表

#includeusing namespace std;

const int inf = 0x3f3f3f3f;

const int maxn = 1e6 + 10;

struct edge

;vectore[maxn];

int pre[maxn];//記錄路徑

bool inq[maxn];//是否在佇列內,優化用

int neg[maxn];//記錄迴圈次數判斷負圈

int dis[maxn];//記錄最短距離

void print_path(int s, int t)//遞迴輸出最短路徑

print_path(s, pre[t]);

printf(" %d",t);

}void print_path2(int s, int t)//非遞迴的路徑輸出,適用於極端情況

printf("%d",s);

while(!ans.empty())

printf("\n");

}bool spfa(int s, int n)}}

}printf("%d\n",dis[n]);

print_path2(s,n);

return true;

}int main()

edge[num];

int cnt;

int head[num];

int dis[num];

bool inq[num];

int neg[num];

int pre[num];

void print_path(int s,int t)//列印起點s到t的最短路徑

printf("%d",s);

while(!ans.empty())

printf("\n");

}void init()//前向星的初始化}}

}printf("%d\n",dis[n]);

print_path(s, n);

return true;

}int main()

spfa(1, n);

}return 0;

}

//基於鄰接表

#includeusing namespace std;

const int inf = 0x3f3f3f3f;

const int num = 1e5;

struct edge

};vectore[num];

struct s_node

bool operator < (const s_node & a) const

};int dis[num];

bool done[num];

int pre[num];//記錄前驅結點

void print_path(int s, int t)

printf("%d",s);

while(!ans.empty())

printf("\n");

}void dijkstra(int s,int n)}}

printf("%d\n",dis[n]);

print_path(s, n);

}int main()

dijkstra(1, n);

}return 0;

}

最短路徑C C

本文介紹求最短路徑,但不是dijkstra演算法和bellman ford演算法求有向圖中一點到其餘各點的最短路徑,而是求解有向圖中指定兩點的最短路徑。方法很簡單,建立與bfs之上,因此我們只需要修改佇列中的內容。這裡本來該有圖的,但是最近忙專業課,下回補上!typedef struct qnode...

最短路徑 Floyd演算法) c c

如果要得到圖中各個頂點之間的最短路徑,方法1 可以對每乙個頂點採用dijkstra演算法 方法2 可以採用floyd演算法,它是一種用來求雙源點之間最短路徑的演算法,採用鄰接矩陣來儲存圖 輔助結構 int d maxsize maxsize 表示從各個頂點之間最短路徑長度 例 d i j 表示從i頂...

Codeup最短路徑 最短路徑

n個城市,標號從0到n 1,m條道路,第k條道路 k從0開始 的長度為2 k,求編號為0的城市到其他城市的最短距離。第一行兩個正整數n 2 n 100 m m 500 表示有n個城市,m條道路,接下來m行兩個整數,表示相連的兩個城市的編號。n 1行,表示0號城市到其他城市的最短路,如果無法到達,輸出...