時間限制: 1 s
空間限制: 128000 kb
題目等級 : 鑽石 diamond
題解在網路通訊中,經常需要求最短路徑。但完全用最短路徑傳輸有這樣乙個問題:如果最終在兩個終端節點之間給出的最短路徑只有一條。則在該路徑中的任乙個節點或鏈路出現故障時,訊號傳輸將面臨中斷的危險。因此,對網路路由選擇作了以下改進:
為任意兩節點之間通訊提供三條路徑供其選擇,即最短路徑、第二最短路徑和第三最短路徑。
第一最短路徑定義為:給定乙個不含負迴路的網路d=,其中v=,a為邊的集合,w為權的集合,設p1是d中最短(v1,vn)路。稱p1為d中最短(v1,vn)路徑,如果d中有一條(v1,vn)路,p2滿足以下條件:
(1)p2≠p1;(2)d中不存在異於p1的路p,使得:
(3)w(p1)≤w(p)則稱p2為d的第二最短路徑。
第三最短路徑的定義為:設p2是d中第二最短(v1,vn)路徑,如果d中有一條(v1,vn)路p3滿足以下條件:
(1)p3≠p2並且p3≠p1;(2)d中不存在異於p1,p2的路p,使得:
(3)w(p2)≤w(p)則稱p3為d中第三最短路徑。
現給定一有n個節點的網路,n≤30,求給定兩點間的第
一、第二和第三最短路徑。
輸入描述 input description
輸入: n s t max (每格數值之間用空格分隔)
m11 m12 … m1n
m21 m22 … m2n
mn1 mn2 … mnn
其中,n為節點數,s為起點,t為終點,max為一代表無窮大的整數,mij描述i到j的距離,若mij=max,則表示從i到j無直接通路,mii=0。
輸出描述 output description
輸出:三條路徑(從小到大輸出),每條路徑佔一行,形式為:路徑長度 始點…終點 (中間用乙個空格分隔)
樣例輸入 sample input
5 1 5 10000
0 1 3 10000 7
10000 0 1 10000 10000
10000 10000 0 1 4
10000 10000 10000 0 1
10000 1 10000 10000 0
樣例輸出 sample output
4 1 2 3 4 5
5 1 3 4 5
6 1 2 3 5
資料範圍及提示 data size & hint
分類標籤 tags 點此展開
最短路圖論
題解:
暴力就好了,存路徑的時候注意處理一下。
第一次輸出路徑的遞迴寫炸了,re,25
#include#include更新:floyed換成dijkstra;不再用遞迴輸出路徑#include
using
namespace
std;
#define n 35
intn,s,t,maxn;
intf[n][n],dis[n][n],pre[n][n];
short
ans[n];
bool
vis[n][n];
void print(int
x)void
out(int
x)int
main()
}memcpy(f,dis,
sizeof
dis);
for(int k=1;k<=n;k++)}}
}}printf(
"%d
",dis[s][t]);
printf(
"%d
",s);ans[++ans[0]]=s;print(t);putchar('\n'
);
//for(int i=1;i<=ans[0];i++) printf("%d ",ans[i]);
int res=0x7fffffff
,jx,jy,u,v;
for(int i=1;i0];i++)}}
vis[jx][jy]=1
; printf(
"%d
",dis[s][t]+res);
int t=pre[s][jy];
pre[s][jy]=jx;
//cout
%d ",s);out(t);putchar('\n'
); pre[s][jy]=t;
res=0x7fffffff
;
for(int i=1;i0];i++)}}
printf(
"%d
",dis[s][t]+res);
pre[s][jy]=jx;
/*cout
printf(
"%d
",s);out(t);putchar('\n'
);
return0;
}
思路來自以前的次短路題目:最短路與次短路的關係,次短路與第三短路的關係同理)
題解:
dis[0][t]表示s->t的最短路;(1)
dis[1][t]表示s->t的次短路;(2)
dis[2][t]表示s->t的第三短路;(3)
step模擬vector存路徑
step[0][t][0]表示(1) s->t需要經過幾個點。輸出step[0][t][0]->step[0][t][step[0][t][0]]即可。
step[1][t][0],step[2][t][0]同樣
和普通dijkstra大致一樣,再加上三維表示更新哪一短路。
更新時,有三種情況:
1、有比最短路短的k:(3)=(2);(2)=(1);(1)=k;
2、有比次短路短的k:(2)=(1);(1)=k;
3、有比第三短路短的k:(1)=k;
1 2 3情況更新dis時,同時要更新step
詳見**。
ac**:
#include#define n 50const
int inf=1000000009
;int
n;int d[n][n],dist[3][n],vis[3][n],step[3
][n][n];
void dijkstra(int
s) vis[u][v]=1
;
for(j=1;j<=n;j++)
if(v!=j)
else
if(!vis[1][j]&&k1
][j])
else
if(!vis[2][j]&&k2
][j])}}
}int
main()
}dijkstra(s);
printf(
"%d
",dist[0
][t]);
for(i=1;i<=step[0][t][0];i++) printf("
%d ",step[0][t][i]);printf("
%d\n
",t);
printf(
"%d
",dist[1
][t]);
for(i=1;i<=step[1][t][0];i++) printf("
%d ",step[1][t][i]);printf("
%d\n
",t);
printf(
"%d
",dist[2
][t]);
for(i=1;i<=step[2][t][0];i++) printf("
%d ",step[2][t][i]);printf("
%d\n
",t);
return0;
}
004 路由選擇協議
常見的路由選擇協議有 rip協議 ospf協議。路由資訊協議 英語 routing information protocol,縮寫 rip 是一種內部閘道器協議 igp 為最早出現的距離向量路由協定。屬於網路層,其主要應用於規模較小的 可靠性要求較低的網路,可以通過不斷的交換資訊讓路由器動態的適應網...
03 路由原理
二 路由原理 路由 routing 是指路由器從乙個介面上收到資料報,根據資料報的目的位址進行定向並 到另乙個介面的過程。路由 routing 是指分組從源到目的地時,決定端到端路徑的網路範圍的程序。以上是教科書給出的定義,所謂的路由,就是路由器對資料報從源位址到目標位址選擇路徑的過程。s 192....
3 路由配置
一 路由配置 path path 函式 匯入 from django.urls import path 語法 path route,views,name none 引數 1.route 字串型別,匹配的請求路徑 2.views 指定路徑所對應的檢視處理函式的名稱 3.name 為位址起別名,在模版中...