看了別人的代碼才寫出來的……
這裏修改了floyd算法。
floyd算的最外層循環,循環k層結束時,dis[i][j]表示i 到 j 的最短距離,之間的點序號不大於 k 。
#include<iostream> #include<string> using namespace std; const int maxn=1000; int n; int count=0; int ans=123456789; int dis[maxn][maxn]; int g[maxn][maxn]; int pre[maxn][maxn]; int road[maxn]; void init() { ans=123456789; for (int i=1;i<=n;i++) { for (int j=1;j<=n;j++) { dis[i][j]=g[i][j]=123456789; pre[i][j]=j; } } } void floyd() { for (int k=1;k<=n;k++) { for (int i=1;i<k;i++) { for (int j=1;j<i;j++) { int temp; if ((temp=dis[i][j]+g[i][k]+g[j][k])<ans) { ans=temp; int p=i; count=0; road[++count]=i; while (p!=j) { road[++count]=pre[p][j]; p=pre[p][j]; } road[++count]=k; } } } for (int i=1;i<=n;i++) { for (int j=1;j<=n;j++) { if (dis[i][k]+dis[k][j]<dis[i][j]) { dis[i][j]=dis[i][k]+dis[k][j]; pre[i][j]=pre[i][k]; } } } } } int main() { //freopen("in.txt","r",stdin); while (cin>>n,n!=-1) { init(); int m; int x,y,z; cin>>m; while (m--) { cin>>x>>y>>z; if (z<g[x][y]) { g[x][y]=g[y][x]=z; dis[x][y]=dis[y][x]=z; } } floyd(); if (ans==123456789) { cout<<"No solution."<<endl; } else { for (int i=1;i<=count;i++) { if(1==i) cout<<road[i]; else cout<<" "<<road[i]; } cout<<endl; } } return 0; }
直播概要: 隨着計算機的蓬勃發展,互聯網進入大數據和人工智能時代,爲了解決信息過載和長尾商品,推薦系統成爲唯一選擇,而面對不同的業務場景,爲了解決業務痛點,會根據不同的場景特點尋找不同的方法和手段來解決推薦中實際遇到的問題。在智慧家庭領域,
{"type":"doc","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"typ
{"type":"doc","content":[{"type":"blockquote","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null
{"type":"doc","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"blockq