hdu 3760 2次bfs求最短路)

2021-09-06 12:02:16 字數 1176 閱讀 3777

思路:首先是建反圖,從點n開始做spfa求出n到各點的最短路,然後從1點開始搜最小序列,對於邊(u,v),若dist[u]==dist[v]+1,則要將當前的序號加入當前佇列中,然後就是對於那些序號相同點的都要加入當前佇列,還要判一下重。至於為什麼要建反圖從n點開始求最短路,因為在搜最小序列的時候要保證一定能搜到n點。

1

#pragma comment(linker, "/stack:1024000000,1024000000")

2 #include3 #include4 #include5 #include6 #include7

using

namespace

std;

8#define maxn 1000000

9#define inf 1<<30

1011

struct

edgeedge[maxn];

1415

intn,m,ne;

16int

head[maxn];

1718

void insert(int u,int v,int w,int

color)

1926

27bool

mark[maxn];

28int

dist[maxn];

29void

spfa()

3048}49

}50}51

}5253int

vv[maxn];

54void

bfs()

55else

if(color==ans)78}

79}80}

81if

(flag)else

85 printf("%d"

,ans);

86for(int i=0;i)91}

92 puts(""

);93}94

95int

main()

96108

spfa();

109 printf("

%d\n

",dist[1

]);110

bfs();

111}

112return0;

113 }

view code

BFS求最短路

假設有乙個n行m列的迷宮,每個單位要麼是空地 用1表示 要麼是障礙物 用0表示 如和找到從起點到終點的最短路徑?利用bfs搜尋,逐步計算出每個節點到起點的最短距離,以及最短路徑每個節點的前乙個節點。最終將生成一顆以起點為根的bfs樹。此時bfs可以求出任意一點到起點的距離。poj3984 bfs求最...

BFS求最短路

假設有乙個n行m列的迷宮,每個單位格要麼是空地 用1來表示 要麼是障礙物 用0來表示 如何找到從起點到終點的最短路徑?分析 要找到終點到起點的最短路徑,可以使用二叉樹的bfs,因為二叉樹的bfs的訪問順序就是結點到根節點的距離,從小到大訪問的,因此可以從迷宮圖的起點開始進行bfs的寬度優先遍歷。遍歷...

HDU1026(BFS求最短路徑並記錄)

一.題意 英雄去救公主,起點 0,0 終點 row 1,col 1 x 不能走,遇到數字停下來打怪,數字多少就要打多少秒,求最快到達時間。二.解題思路 看結構體怎麼定義的就直接知道我怎麼記錄路徑的,記得路徑的陣列要開大一些。三.ac include include include include u...