图结构练习——最短路径
题目
坑点
题目输入的时候会有重边。比如说:
2 2
1 2 1
1 2 2
答案应该是1。
题解
就是jd最短路模板题,不多说
代码1:临界矩阵
使用临界矩阵,注意判断重边
#include <bits/stdc++.h> using namespace std; typedef long long ll; #define PII pair<int, int> #define x first #define y second const int maxn = 1e6 + 10; const int INF = 0x3f3f3f3f; const ll M = 11092019; const int N = 100010; int g[110][110]; int n, m; int vis[110]; int dis[110]; void dj() { priority_queue<PII, vector<PII>, greater<PII>> q; q.push({0, 1}); dis[1] = 0; while (q.size()) { PII k = q.top(); q.pop(); if (vis[k.second]) continue; vis[k.second] = 1; for (int i = 1; i <= n; i++) { if (g[k.second][i]) { int dist = k.first + g[k.second][i]; if (dis[i] > dist) { dis[i] = dist; q.push({dis[i], i}); //cout<<dis[i]<<" "<<i<<endl; } } } } } int main() { while (cin >> n >> m) { memset(g, 0, sizeof g); memset(dis, 0x3f, sizeof dis); memset(vis, 0, sizeof vis); for (int i = 0; i < m; i++) { int a, b, c; cin >> a >> b >> c; if (!g[a][b])//判断重边 g[a][b] = g[b][a] = c; else { g[a][b] = g[b][a] = min(c, g[a][b]); } } dj(); cout << dis[n] << endl; } return 0; }
代码2:邻接表
邻接表就不需要判断重边,因为两个边都会输入
#include <bits/stdc++.h> using namespace std; typedef long long ll; #define PII pair<int, int> #define x first #define y second const int maxn = 1e6 + 10; const int INF = 0x3f3f3f3f; const ll M = 11092019; const int N = 100010; vector<PII> g[110]; int n, m; int vis[110]; int dis[110]; void dj() { priority_queue<PII, vector<PII>, greater<PII>> q; q.push({0, 1}); dis[1] = 0; while (q.size()) { PII k = q.top(); q.pop(); if (vis[k.second]) continue; vis[k.second] = 1; for(PII t: g[k.second]){ int dist=t.first+k.first; int ver=t.second; if(dist<dis[ver]){ dis[ver]=dist; // cout<< ver<< " "<<dis[ver]<<endl; q.push({dis[ver],ver}); } } } } int main() { while (cin >> n >> m) { for(int i=0;i<n;i++){ g->clear(); } memset(g, 0, sizeof g); memset(dis, 0x3f, sizeof dis); memset(vis, 0, sizeof vis); for (int i = 0; i < m; i++) { int a, b, c; cin >> a >> b >> c; g[a].push_back({c,b}); g[b].push_back({c,a}); } dj(); cout << dis[n] << endl; } return 0; }
本文作者:kingwzun
本文链接:https://www.cnblogs.com/kingwz/p/15847047.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步