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 }
  • 相关阅读:
    委托与事件参数的简单运用
    C#消息队列专题
    项目计划流程简易描述
    cookies 客户端历史记录篇
    朋友做的VS2005插件:等号两边值互换
    SSE2指令集系列之二
    SSSE3指令集
    SSE3指令集系列
    SSE特殊指令集系列之一
    SSE2指令集系列之一
  • 原文地址:https://www.cnblogs.com/windrises/p/4660246.html
Copyright © 2011-2022 走看看