zoukankan      html  css  js  c++  java
  • UVa 10129单词(欧拉回路)

    https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1070

    题意是输入n个单词,是否可以把所有这些单词排成一个序列,使得每个单词的第一个字母和上一个单词的最后一个字母相同。输入中可以有重复单词。

    由于最后只需要判断是否能排成这样的一个序列,所以没有输入单词后,只需要把首尾字母保存下来,然后可以dfs深度递归。由于可能会有重复单词,在这里可以设一个times数组来记录单词所用的次数。

     1 #include<iostream>
     2 #include<cstring>
     3 using namespace std;
     4 
     5 int map[30][30];
     6 int times[30][30];
     7 int number;
     8 
     9 void dfs(int u,int v)
    10 {
    11     number++; 
    12     for (int i = 0; i < 26; i++)
    13     {
    14         if (map[v][i]>0 && times[v][i] < map[v][i])
    15         {
    16             times[v][i]++;
    17             dfs(v, i);
    18         }
    19     }
    20 }
    21 
    22 int main()
    23 {
    24     char s[1005];
    25     int t;
    26     cin >> t;
    27     while (t--)
    28     {
    29         int n,p;
    30         cin >> n;
    31         p = n;
    32         memset(s, 0, sizeof(s));
    33         memset(map, 0, sizeof(map));
    34         int k = 0,u,v,l;
    35         while (n--)
    36         {
    37             cin >> s;
    38             u = s[0] - 'a';
    39             l = strlen(s);
    40             v = s[l - 1] - 'a';
    41             map[u][v]++;
    42         }
    43         int flag;
    44         for (int i = 0; i < 26; i++)
    45         {
    46             flag = 0;
    47             for (int j = 0; j < 26; j++)
    48             {
    49                 if (map[i][j]>0)
    50                 {
    51                     number = 0;
    52                     times[i][j]++;
    53                     dfs(i,j);
    54                     memset(times, 0, sizeof(times));
    55                     if (number == p)  { flag = 1; break; }
    56                 }
    57             }
    58             if (flag == 1) break;
    59         }
    60         if (flag == 0)  cout << "The door cannot be opened." << endl;
    61         else cout << "Ordering is possible." << endl;
    62     }
    63     return 0;
    64 }
  • 相关阅读:
    MySQL 字符串与时间操作函数
    Redis消息订阅,事务,modules
    Redis数据结构
    Redis数据类型String
    Redis
    网络协议原理和lvs三种模型,调度算法和keepalived
    TCP连接状态,SYNC_RECV,CLOSE_WAIT,TIME_WAIT
    arp_ignore和arp_announce
    JMH和Disrupter
    容器CopyOnWriteList,ConcurrentHashMap,ConcurrentSkipListMap,BlockingQueue
  • 原文地址:https://www.cnblogs.com/zyb993963526/p/6171988.html
Copyright © 2011-2022 走看看