hdu 3812 Sea Sky 深搜+剪枝

2014-11-24 10:47:52 · 作者: · 浏览: 1

题目意思:

从sea 找一条道sky 的最长路

题解:

先进行一系列的预处理

1。将所有不重复的字符串先保留下来,然后从小到大排序,这样深搜的时候最先弄出来的答案就是最小的 字母序。

2. 进行深度优先搜索保留答案

3. 剪枝:

(1) 要注意sea sky 不存在的情况

(2) 要主要不连通情况

(3) 强力剪枝 不解释了。


#include
  
   
#include
   
     #include
    
      #include
     
       #include
       #include
       
         using namespace std; char real[105][30]; int n,w=0,mm[105][105],st,et; char temp1[208][30]; int record[105],vis[105],vis1[105]; int yes[105],root[105]; int Find(int r) { if(r==root[r]) return r; else return root[r]=Find(root[r]); } int add(char *a) { int i; for(i=0;i
        
         0){ char temp[30]; strcpy(temp,real[j]); strcpy(real[j],real[i]); strcpy(real[i],temp); } } for(i=0;i
         
          =w) return 0; int i; vis[now]=1; record[tt]=now; if(now==et){ if(ansl