问题:给出一个n结点的图,求最大边与最小边差值最小的生成树
my code:
#include <iostream> #include <cstdio> #include <cstring> #include <stack> #include <algorithm> #include <map> using namespace std; #define N 102 #define INF 0x7fffffff struct Edge { int u, v, w; bool operator < (const Edge &t) const { return w < t.w; } }c[N*(N-)/]; int p[N]; int findRoot(int x) { return p[x] == x? x: p[x] = findRoot(p[x]); } void build(int l, int r, int &edge, int &maxl, int &minl) { for(int i=l; i<=r; i++) { int pu = findRoot(c[i].u); int pv = findRoot(c[i].v); if(pu != pv) { p[pu] = pv; edge++; maxl = max(maxl, c[i].w); minl = min(minl, c[i].w); } } } int main() { int n, m; int maxl, minl, edge, gap; while(cin>>n>>m, n || m) { ){ cout<< - <<endl; continue; } gap = INF; ; i<m; i++) cin>>c[i].u>>c[i].v>>c[i].w; sort(c, c+m); ; i+n-<m; i++) { ; k<=n; k++) p[k] = k; maxl = -INF; minl = INF; edge = ; build(i, i+n-, edge, maxl, minl); ){ gap = min(gap, maxl-minl); continue; } ; j<m; j++) { build(j, j, edge, maxl, minl); ){ gap = min(gap, maxl-minl); break; } } } <<endl; else cout<< gap <<endl; } ; }