關於vjudge POJ 1847的題解

2021-09-26 11:34:43 字數 2743 閱讀 2729

題目大意:

薩格勒布的電車網路由許多交叉路口和連線其中一些的鐵路組成。在每個交叉路口都有乙個開關,指向從交叉路口出來的一條鐵軌。當有軌電車進入交叉路口時,它只能沿開關指向的方向離開。如果駕駛員想要採取其他方式,他/她必須手動更換開關。

當駕駛員從交叉路口a到交叉路口b進行駕駛時,他/她試圖選擇將最小化他/她必須手動更換開關的次數的路線。

編寫乙個程式,計算從交叉路口 a

aa 到交叉路口 b

bb 所需的最小開關變化次數。

輸入輸入的第一行包含整數 n

nn,a

aa 和 b

bb,由單個空白字元分隔,2≤n

≤100,1

≤a,b

≤n,n

2 \le n \le 100,1 \le a,b \le n,n

2≤n≤10

0,1≤

a,b≤

n,n 是網路中的交叉點數,以及交叉點從 1

11 到 n

nn 編號。

以下 n

nn 行中的每一行包含由單個空白字元分隔的整數序列。第 i

ii 行中的第乙個數字 ki(

0≤ki

≤n−1

)k_i(0 \le k_i \le n-1)

ki​(0≤

ki​≤

n−1)

表示從第i個交叉點出來的軌道數。下乙個 k

ik_i

ki​ 數字表示直接連線到第i個交叉點的交叉點。第i個交叉點中的交換點最初指向列出的第乙個交叉點的方向。

產量輸出的第一行也是唯一一行應包含目標最小數。如果沒有從 a

aa 到 b

bb 的路由,則該行應包含整數 −1-1

−1。樣本輸入

321

2232

3121

2

樣本輸出

0
翻譯可能不準確,是谷歌的

自己初中水平有限,請多多包涵

題意分析

\tt \text

題意分析

首先,電車的軌道就相當於一張圖

不妨我們將不用轉動的當做0,需要轉動的當做1(每個開關就相當於一條無向邊)

由此我們就可以將本題轉換為圖論最短路

輸入輸出的分析

每一行的第乙個數代表和它相連的點

第乙個點就先標記為0,其他為1

關於**

時間限制不嚴格各種方式都可以通過
此為通過的截圖

這種題可以用floyd 因為真的簡單

for

(int k=

1;k<=n;k++

)for

(int u=

1;u<=n;u++

)for

(int v=

1;v<=n;v++

)

這是一種 o(v

3)o(v^3)

o(v3

) 的複雜度,比賽時不推薦,但是注意第乙個迴圈本質上就是考慮走了幾條邊,這個是很有用的性質。

spfa

\text

spfa

這是 o(k

e)o(ke)

o(ke

) 的複雜度,顯然在現在已經假了

**

#

include

//#include

#include

#include

#include

using

namespace std;

struct

edg;

const

int inf=

0x3f3f3f3f

;vector edg[

205]

;int dist[

105]

;int vis[

205]

;int

main()

);for(

int j=

2;j<=x;j++))

;}} queue<

int> q;

q.push

(a);

for(

int i=

1;i<=n;i++

) dist[i]

=inf;

dist[a]=0

; vis[a]

=true

;while

(!q.

empty()

)}}}

if(dist[b]

==inf)

printf

("-1\n");

else

printf

("%d\n"

,dist[b]);

}return0;

}

注意:不要忘記判斷無解的情況。

謝謝您的**

關於題的分析

看下面的 分析結果 public class transfertest3 public void first public void second value v,int i class value 先給出答案 15 0 20為什麼呢?這個問題主要糾結在最後的這個20上 public void fi...

關於樹的程式設計題

public boolean issametree treenode tree1,treenode tree2 else if tree1 null tree2 null if tree1 null tree2 null else return false 原文 二叉樹的映象 public void...

關於陣列的演算法題

1.當陣列中包含負數時,返回該陣列的最大連續子串行的和。例如 6,3,2,7,15,1,2,2 其連續子串行的最大和是8 從第0個開始,到第3個為止 子串行的長度至少為1。class solution def sum arr self,array sum 0 max 0 for data in ar...