題目描述
這道題有個坑,雖然沒掉進去,但是沒跨過去
坑is here路徑上的所有點的出邊所指向的點都直接或間接與終點連通。
所以就需要建反圖 來刪去一些沒用的點
從終點倒著找 搜尋不到的點就刪去 與這些點直接相連的點也刪去
要注意做標記的時候 要用乙個新的陣列 以防其他的被改變
還有就是陣列模擬鄰接表的應用
看**吧
#include#include#includeusing namespace std;
int b[10050],q[2000050],st[10050],h[10050],f[10050],f2;
struct road
;road edge[2000050];
void bfs1(int x)
ha++; }}
void bfs2(int x,int y)
cin>>s>>t; bfs1(t);//找到從終點能遍歷的點
for(i=1;i<=n;i++)
if(b[i]==1)
for(j=h[i];j>0;j=edge[j].next)
f[edge[j].to]=1;//找到與刪去的點直接相連的點
for(i=1;i<=n;i++)
if(b[i]==0&&f[i]==1)
b[i]=1;//結合兩個標記
bfs2(t,s);//從終點開始找最短路徑
if(f2==0) cout<<"-1";
fclose(stdin); fclose(stdout);
return 0;
}
洛谷P2296 尋找道路
在有向圖g 中,每條邊的長度均為1 現給定起點和終點,請你在圖中找一條從起點到終點的路徑,該路徑滿足以下條件 1 路徑上的所有點的出邊所指向的點都直接或間接與終點連通。2 在滿足條件1 的情況下使路徑最短。注意 圖g 中可能存在重邊和自環,題目保證終點沒有出邊。請你輸出符合條件的路徑的長度。輸入格式...
洛谷 P2296 尋找道路
題目描述 在有向圖g 中,每條邊的長度均為1 現給定起點和終點,請你在圖中找一條從起點到終點的路徑,該路徑滿足以下條件 1 路徑上的所有點的出邊所指向的點都直接或間接與終點連通。2 在滿足條件1 的情況下使路徑最短。注意 圖g 中可能存在重邊和自環,題目保證終點沒有出邊。請你輸出符合條件的路徑的長度...
洛谷 P2296 尋找道路
題目大意 在乙個有向圖中找出2點之間的最短路,並且路徑上的所有點的出邊所指向的點都直接或間接與終點連通。題解 spfa 佇列 dfs 1.從終點方向搜,把終點能到的點標記可到達。2.把終點能到達的點的出邊判斷,如果出邊未被標記則狀態更新為不可到達。3.做spfa,若t i 可以到達就做,不然不做。v...