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