poj 3026 N bfs 最小生成樹

2022-04-08 05:17:14 字數 1646 閱讀 6325

題意:

乙個迷宮,一堆外星人,從起點找到所有外星人,路徑只能在有外星人的地方分叉,求最短總路徑

最小生成樹題,把每個外星人當做樹的結點,對每個外星人分別bfs求到其他外星人的最短的路徑,然後將這些路徑用最小生成樹求解,兵茶几的克爾蘇卡爾用二維座標轉一維即可。這裡資料量較小,所以可以直接用 x+y*50 這樣表示座標。

毒瘤啊,長寬哪一行輸入資料後面有一堆空格,會卡getline,不能只用乙個個getchar()來吃掉長寬那一行的後面的回車

如果用getline讀取,在讀長寬後加一句 while(char c=getchar()!='\n')c=getchar(); 即可。

ac**如下:

1 #include2 #include3 #include4 #include5 #include6

//#define qqqq cout<<"hello!"<7

using

namespace

std;

8 typedef int

sss;

9char g[550][550

];10

bool info[550][550

];11

sss t,n,m;

12sss tot,res,cnt,cnt2;

1314

1516 sss tree[25500

];17

sss uns(sss root)

25return

root;26}

27sss join(sss a,sss b)

34return0;

35}3637

structe38

;41struct

edgeedge[2000005

];44

45bool

cmp(edge a,edge b)

4849

struct

point;

52void

fuzhi()

57for(sss i=1;i<=n;i++)63}

64}65void

bfs(e start)

83 info[now.x][now.y]=0;84

if(info[now.x+1][now.y]==1)89

if(info[now.x][now.y+1]==1)94

if(info[now.x-1][now.y]==1)99

if(info[now.x][now.y-1]==1

)104

}105

}106

void

solve()

117}

118}

119}

120121

void

kersukaer()

126}

127}

128129

intmain()

142solve();

143 sort(edge,edge+cnt2,cmp);

144//

for(int i=0;i<=cnt2;i++)

147kersukaer();

148 cout149}

150return0;

151 }

POJ 1258 最小生成樹

include include struct fiberfiber 10000 struct farmsfarms 100 void exchange struct fiber fiber,int i,int j int partition struct fiber fiber,int p,int ...

最小生成樹 poj 2485

include include include include include include define m 505 define im 505 505 2 using namespace std int r im int w im int u im int v im int p m int c...

poj1679 最小生成樹

題目大意 判斷是否存在最小生成樹。如果存在,判斷其是否唯一。用prim演算法求最小生成樹。將其中的每一條邊依次替換,權值是否和最小生成樹相同。如果相同,則最小生成樹不唯一。如果都不相同,則唯一。這個prim的模板比較好,可以再求最小生成樹的同時直接進行判斷唯一性。如下 include include...