題目傳送:hdoj 1233
解題思路:kruskal演算法,利用kruskal演算法獲得最小生成樹,即可求得答案。
資料結構:記錄下起始座標,結束座標,兩點距離和該路是否被選中這四個資訊。
view code
struct過程:1、讀取所有路徑資訊,儲存在上述資料結構的陣列中;edge
2、快速排序,使得陣列中的資料結構按路徑長度從小到大排列;
3、優先選擇路徑較短的建樹,此處為for迴圈;
4、建樹過程中,利用並查集判斷該路是否會產生迴路,如果迴路則拋棄;
5、直到生成一棵樹覆蓋所有座標(城市)為止。
題目**:
#include #include struct edgeedge[5000];int father[110];
int cmp( const void *a ,const void *b)
int find(int a)
int merge(int x,int y)
}int main()
qsort(edge,num,sizeof(edge[0]),cmp);
p=1;//初始化判斷位p,1為選擇,0為拋棄
sum=0;//初始化sum,記錄最短路徑長度
for(i=0;i
}printf("%d\n", sum);
}return 0;
}
HDOJ 1233 還是暢通工程 最小生成樹
time limit 4000 2000 ms j a others memory limit 65536 32768 k j a others total submission s 33106 accepted submission s 14936 problem description 某省調查...
HDU 1233 還是暢通工程
題意 有1 n個村莊,村莊與村莊之間要鋪設公路,在使任意兩個村莊都能相互到達的前提下使修路的花費最少 解題思路 這題是典型的最小生成樹的題,可以選擇prim演算法或者kruskal演算法。prim使用與稀疏圖,二此題中的邊有n n 1 2條,因此最好是用kruskal演算法。kruskal演算法的思...
杭電 1233 還是暢通工程
基礎的最小生成樹題目 可以拿來練習一下prim演算法和kruskal演算法的運用 prim include include using namespace std int main for int i 1 i n i int t n n 1 2 while t int sum 0 dis 1 0 w...