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;
} 


目录
相关文章
|
8月前
UVa10123 No Tipping
UVa10123 No Tipping
38 0
|
8月前
uva375 Inscribed Circles and Isosceles Triangles
uva375 Inscribed Circles and Isosceles Triangles
26 0
|
8月前
UVa11776 - Oh Your Royal Greediness!
UVa11776 - Oh Your Royal Greediness!
36 0
UVa 10082 WERTYU
UVa 10082 WERTYU
99 0
UVa 10082 WERTYU
Problem Description A common typing error is to place the hands on the keyboard one row to the right of the correct position.
859 0
|
机器学习/深度学习
|
人工智能
uva 10189 Minesweeper
/* Minesweeper WA了n次才知道uva格式错了也返回wa没有pe啊尼玛 */ #include&lt;iostream&gt; #include&lt;stdio.h&gt; #include&lt;string.h&gt; using namespace std; char a[105][105]; int main() { int i,j,n,m,
915 0
uva 11627 Slalom
点击打开链接uva 11627 思路:二分答案 分析: 1 给定S个滑雪板的速度,问是否可以找到一个滑板使得通过所有的门的时间最少,如果找不到输出IMPOSSIBLE 2 很明显的二分题目,我们知道了二分那应该怎么判断是否可以通过所有...
1046 0
uva10859Placing Lampposts
题意:给你一个n个点m条边的无向无环图,在尽量少的节点上放灯,使得所有边都被照亮,每盏灯将照亮以他为一个端点的所有边,在灯的总数最小的前提下,被两盏灯同时照亮的边数应当尽量大。 分析:d(i,j)表示i的父节点放灯的状态为j(1表示放,0不放),以i为根的树的最小x值     x=Ma+c, a表...
764 0