zoukankan      html  css  js  c++  java
  • Uva 539 The Settlers of Catan

      The Settlers of Catan 

    简单题,感觉回溯的最大的一个特点就是在其中一次递归的过程中修改变量后要恢复原状,而且过程跟DFs类似,思路明白了就好做了,这题也一样,题目说找一条最长的路,每两个节点的路径只能走一次,节点可以走多次,我是将将有路径的节点标记好,走过后将这条路径删掉,然后遍历回来的再把这条路恢复,走到一节点该节点没有路径可走的时候判断是否为最长

    题目链接: http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=108&page=show_problem&problem=480

     1 #include<stdio.h>
     2 #include<string.h>
     3 #define MAXN 30
     4 
     5 int matrix[MAXN][MAXN];
     6 int max;
     7 
     8 int Traverse(int cur, int n, int m, int cnt)
     9 {
    10     int i, j, flag = 0;
    11     for(i=0; i<n; ++i)
    12     {
    13         if(matrix[cur][i] == 1)
    14         {
    15             flag = 1;
    16             matrix[cur][i] = matrix[i][cur] = 0;
    17             Traverse(i, n, m, cnt+1);
    18             matrix[cur][i] = matrix[i][cur] = 1;
    19         }
    20     }
    21     if(!flag) max = max > cnt ? max : cnt;
    22     return 0;
    23 }
    24 
    25 int main()
    26 {
    27     int i, n, m, from, to, cnt = 0;
    28     while(scanf("%d%d", &n, &m) != EOF)
    29     {
    30         if(!n && !m) break;
    31         max = 0;
    32         memset(matrix, -1, sizeof(matrix));
    33         for(i=0; i<m; ++i)
    34         {
    35             scanf("%d%d", &from, &to);
    36             matrix[from][to] = matrix[to][from] = 1;
    37         }
    38         for(i=0; i<n; ++i)
    39         {
    40             cnt = 0;
    41             Traverse(i, n, m, cnt);
    42         }
    43         printf("%d\n", max);
    44     }
    45     return 0;
    46 }
    物役记

    更多内容请关注个人微信公众号 物役记 (微信号:materialchains)

  • 相关阅读:
    【模板小程序】链表排序(qsort/insert_sort/merge_sort)
    链表回文判断(C++)
    【模板小程序】十进制大数除法(输出商和余数)
    【模板小程序】字符串截取
    【模板小程序】翻转一个句子中的单词
    web前端基础背景
    MongoDB基本知识(补充)
    Python-ORM
    Python-元编程
    ElementUI 中 el-table 获取当前选中行的index
  • 原文地址:https://www.cnblogs.com/liaoguifa/p/3039991.html
Copyright © 2011-2022 走看看