程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> UVA 539 The Settlers of Catan dfs找最長鏈

UVA 539 The Settlers of Catan dfs找最長鏈

編輯:C++入門知識

題意:畫邊求最長鏈,邊不能重復數點可以。

很水,用暴力的dfs即可,因為數據不大。

本來以為可以用floyd進行dp的,後來想想好像不能在有回路上的圖跑。。。於是沒去做。



#include <cstdio>  
const int maxn = 30; 
 
int e[maxn][maxn]; 
int vis[maxn][maxn]; 
int n, m, max; 
 
void dfs(int x, int d) { 
    if (max < d) 
        max = d; 
    for (int i = 0; i < n; i++) 
        if (!vis[x][i] && e[x][i]) { 
            vis[x][i] = vis[i][x] = 1; 
            dfs(i, d + 1); 
            vis[x][i] = vis[i][x] = 0; 
        } 

 
int main() { 
    while (scanf("%d%d", &n, &m) && n && m) { 
        max = 0; 
        int a, b; 
        for (int i = 0; i < n; i++) 
            for (int j = 0; j < n; j++) 
                vis[i][j] = e[i][j] = 0; 
        for (int i = 0; i < m; i++) { 
            scanf("%d%d", &a, &b); 
            e[a][b] = e[b][a] = 1; 
        } 
        for (int i = 0; i < m; i++) 
            dfs(i, 0); 
        printf("%d\n", max); 
    }//while  
    return 0; 

 

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved