uva 539 - The Settlers of Catan

简介: 点击打开链接 题目意思:给定n个节点,编号为0--n-1,在给定m条边,要求一条最长的路径 解题思路 回溯搜索每一点的最长的路径 代码: //求解最长的路径长度,给个的是一个无向的图,那么我们可以用回溯法去做,只要去试探每一个点的最长的路径,然后得到最大的即可。

点击打开链接


题目意思:给定n个节点,编号为0--n-1,在给定m条边,要求一条最长的路径


解题思路 回溯搜索每一点的最长的路径


代码:


//求解最长的路径长度,给个的是一个无向的图,那么我们可以用回溯法去做,只要去试探每一个点的最长的路径,然后得到最大的即可。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <list>
#include <vector>
#include <stack>
#include <cmath>
#include <algorithm>
#define eps 1e-8
using namespace std;
const int MAXN = 30;

int n, m, ans, tans;
int G[MAXN][MAXN];//存储地图
int vis[MAXN];//标记节点是否被走过

//搜索
int dfs(int pos , int max) {
    if(max > tans)//更新临时的tans
        tans = max;
    for (int i = 0; i < n; i++) {
        if (G[pos][i]) {
            --G[pos][i];//无向图每一条边只能走一次
            --G[i][pos];
            vis[pos] = 1;//标记节点被走过
            dfs(i , max+1);
            ++G[pos][i];//状态的回溯
            ++G[i][pos];
            vis[pos] = 0;
        }
    }
    return tans;//返回该点能走的最大值
}

void solve(){
    int i , j;
    int temp;
    for(i = 0 ; i < n ; i++){
        for(j = 0 ; j < n ; j++){
            if(G[i][j]){//遍历每一个点
                tans = 0;//初始化为0
                temp = dfs(i , 0);
                if(ans < temp)//更新最大的值
                    ans = temp;
            }
        }
    }  
}

//主函数
int main() {
    int x, y;
    while (scanf("%d%d%*c", &n, &m) && n && m) {
        memset(G, 0, sizeof (G));
        for (int i = 0; i < m; i++) {
            scanf("%d%d", &x, &y);
            G[x][y] = 1;//因为每一条边只能走一次,所以标记为1即可
            G[y][x] = 1;
        }
        ans = 0;
        solve();
        printf("%d\n", ans);
    }
    return 0;
} 


目录
相关文章
uva10038 Jolly Jumpers
uva10038 Jolly Jumpers
39 0
Uva10001 Garden of Eden
Uva10001 Garden of Eden
46 0
uva 10340 all in all
输入两个字符串s和t,判断是否可以从t中删除0个或多个字符(其他字符顺序不变),得到字符串是。
40 0
UVa11968 - In The Airport
UVa11968 - In The Airport
56 0
UVa10123 No Tipping
UVa10123 No Tipping
61 0
UVa11776 - Oh Your Royal Greediness!
UVa11776 - Oh Your Royal Greediness!
53 0
uva10152 ShellSort
uva10152 ShellSort
62 0
uva10112 Myacm Triangles
uva10112 Myacm Triangles
43 0
uva375 Inscribed Circles and Isosceles Triangles
uva375 Inscribed Circles and Isosceles Triangles
41 0