1 条题解

  • 0
    @ 2026-6-30 19:08:07

    Floyd 求最小环模板

    #include <bits/stdc++.h>
    using namespace std;
    using ll = long long;
    
    const int N = 110;
    ll dis[N][N], w[N][N];
    int n, m, u, v, f;
    ll ans = LLONG_MAX;
    
    void floyd() {
    	for (int k = 1; k <= n; k++) {
    		for (int i = 1; i < k; i++) {
    			for (int j = i + 1; j < k; j++) {
    				ans = min(ans, dis[i][j] + w[j][k] + w[k][i]);
    			} 
    		}
    		
    		for (int i = 1; i <= n; i++) {
    			for (int j = 1; j <= n; j++) {
    				dis[i][j] = min(dis[i][j], dis[i][k] + dis[k][j]);
    			} 
    		}
    	}
    }
    
    int main() {
    	cin >> n >> m;
    	
    	for (int i = 1; i <= n; i++) {
    		for (int j = 1; j <= n; j++) {
    			if (i != j) w[i][j] = dis[i][j] = INT_MAX;
    		}
    	}
    	
    	for (int i = 1; i <= m; i++) {
    		cin >> u >> v >> f;
    		dis[u][v] = dis[v][u] = w[u][v] = w[v][u] = f;
    	}
    
    	floyd();
    	
    	if (ans >= INT_MAX) {
    		cout << "No solution.";
    	} else {
    		cout << ans;
    	}
    
    	return 0;
    }
    ```cpp
    • 1

    D06 最小环 Floyd 算法 无向图的最小环问题

    信息

    ID
    12506
    时间
    1000ms
    内存
    512MiB
    难度
    6
    标签
    递交数
    60
    已通过
    20
    上传者