现在的位置: 首页 > 综合 > 正文

hdu(2181):哈密顿绕行世界问题,dfs遍历

2019年09月03日 ⁄ 综合 ⁄ 共 1461字 ⁄ 字号 评论关闭

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2181

此题真的是一个水题,当然也只有这种题目才给了我前进的动力,要是一直被各种打压,岂不得累死!

这个题只是求路径存在问题,所以正十二面体长啥样样我们并不关心,只要打印对于解就可以了。

下面是一些关于正十二面体的一些知识点:

  这是正十二面体的样子:

正十二面体正五角十二面体

展开图:

 

一些常用数据:

V正十二面体=(15+7√5)/4×a^3 (其中a为棱长,下同)

正五角十二面体正五角十二面体
特征系列 5,0,5,5,5,5,5,0,5,5,0,5,0,5,0,5,0,5
正十二面体是由 12 个
正五边形
所组成的
正多面体
。 若以正十二面体的中心为(0,0,0),各顶点的坐标为{(0,±1/φ,±φ), (±1/φ,±φ,0), (±φ,0,±1/φ), (±1,±1,±1)},其中φ = (-1+√5)/2,

黄金分割数

 

体心到每个顶点的距离(外接球半径)=(√3+√15)/4×a
体心到每个面的中心的距离(内切球半径)=(√(250+110√5))/20×a
体心到每条棱的中点的距离(切棱球半径)=(√5+3)/4×a
 
 
这是代码:
 
 
#include<iostream>
#include<cstdio>
#include<cstring>

using namespace std;

int Map[22][22],vis[22],front[22],T;

void disp(int n,int ans){//打印解
    if(front[n]==n){
        printf("%d:  %d",ans,n);
        return;
    }
    disp(front[n],ans);
    printf(" %d",n);
}


void dfs(int n,int count,int &ans){//count记录已经被遍历的点的个数,ans记录第几个情况
    if(count==20){
        if(Map[n][T]) {
            disp(n,ans);
            printf(" %d\n",T);//最后面的加上起始点
            ans++;
        }
        return;
    }
    for(int i=1,j=1;i<=20 && j<4;i++){//按序号小的先遍历可以保证字典序最小
        if(vis[i] || !Map[n][i]) continue;
        vis[i]=1;
        front[i]=n;
        dfs(i,count+1,ans);
        j++;//因为每个点有且只有三个点与其相连,当找到三个数后就结束循环
        vis[i]=0;
    }
}


int main(){
    //freopen("C:\\Documents and Settings\\All Users\\桌面\\in.txt","r",stdin);
    //freopen("C:\\Documents and Settings\\All Users\\桌面\\out2.txt","w",stdout);
    int a,b,c;
    while(cin>>a && a){
        memset(Map,0,sizeof(Map));
        memset(vis,0,sizeof(vis));
        cin>>b>>c;
        Map[1][a]=Map[1][b]=Map[1][c]=1;
        for(int i=2;i<=20;i++){
            cin>>a>>b>>c;
            Map[i][a]=Map[i][b]=Map[i][c]=1;
            Map[a][i]=Map[b][i]=Map[c][i]=1;
        }
        int k=1;
        while(cin>>T && T){
            vis[T]=1;
            front[T]=T;
            dfs(T,1,k);
            vis[T]=0;
        }
    }
    return 0;
}

 
 

 

抱歉!评论已关闭.