zoukankan      html  css  js  c++  java
  • UVa-140

    决定跳过数据结构那章,来看暴力求解法。暴力这章之前也看过,可是前几天做了一道POJ的暴力题,却没有想起来自己曾经在书上看过类似的暴力枚举解法,所以决定再仔细看一遍。感觉要是不刷题,只是单纯的看书的话,记不住啊。

    书中也说了,可以剪枝(“发现两个结点的距离大于或等于k”,“如果在搜索到结点u时,u结点还有m个相邻点没有确定位置”),不过这只能跳过当前排列而已,对减少时间复杂度的意义不是太大,所以我就还是贴上自己原本的代码。

    前几天买了侯捷的《STL源码剖析》,最近在研究STL,真好用,比如这个题直接用next_permutation,方便极了。

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<algorithm>
     5 using namespace std;
     6 const int maxx=100;
     7 const int maxn=250;
     8 int main()
     9 {
    10     char s[maxx]={};
    11     while(~scanf("%s",s)&&s[0]!='#')
    12     {
    13         int len=strlen(s);
    14         bool f[maxn]={};
    15         bool mg[maxn][maxn]={};
    16         char a,b;
    17         bool f1=0;
    18         char v[maxn]={};
    19         int n=0;
    20         for(int i=0;i<len;i++)
    21         {
    22             if(s[i]==':')
    23             {
    24                 f1=1;
    25                 continue;
    26             }
    27             if(s[i]==';')
    28             {
    29                 f1=0;
    30                 continue;
    31             }
    32             if(!f[s[i]])
    33             {
    34                 v[n++]=s[i];
    35                 f[s[i]]=1;
    36             }
    37             if(f1==0) a=s[i];
    38             else
    39             {
    40                 b=s[i];
    41                 mg[a][b]=mg[b][a]=1;
    42             }
    43         }
    44         sort(v,v+n);
    45         char vans[maxn]={};
    46         int ans=1e9;
    47         do
    48         {
    49             int tans=0;
    50             for(int i=0;i<n;i++)
    51                 for(int j=i+1;j<n;j++)
    52                     if(mg[v[i]][v[j]]) tans=max(tans,j-i);
    53             if(tans<ans)
    54             {
    55                 strcpy(vans,v);
    56                 ans=tans;
    57             }
    58         }while(next_permutation(v,v+n));
    59         for(int i=0;i<n;i++) printf("%c ",vans[i]);
    60         printf("-> %d
    ",ans);
    61     }
    62 }
  • 相关阅读:
    alpha版本发布前的进度
    1.26~1.27
    1.23~1.25
    1月21日~1月22日工作情况
    1月17日工作情况
    1月16日小组开会
    1月15日工作进度
    1月12日~1月14日工作进度
    linux下的动态链接库管理
    小组第一次小组讨论
  • 原文地址:https://www.cnblogs.com/windrises/p/4660246.html
Copyright © 2011-2022 走看看