【软考】哈密尔顿回路(Hamiltion)

1. 说明
  • 1.一个无向连通图G点上的哈密尔顿(Hamiltion)回路是指从图G上的某个顶点出发,经过图上所有其他顶点一次且仅一次,最后回到该顶点的路径。
2. c代码实例
#include <stdio.h>
#include <stdlib.h>
#define MAX 4

void hamiltion(int n, int x[MAX], int c[MAX][MAX]){
    int i;
    int visited[MAX];
    int k;
    // 初始化xs数组和visited数组
    for(i = 0; i<n; i++){
        x[i] = 0;
        visited[i] = 0;
    }
    // 访问起始顶点
    k = 0;
    visited[0] = 1;
    x[0] = 0;
    k = k + 1;
    // 访问其他顶点
    while(k >= 0){
        x[k] = x[k] + 1;
        while(x[k]<n){
            if(visited[x[k]] == 0 && c[x[k-1]][x[k]] == 1){
                // 找下一个邻接顶点且x[k]未被访问过,找到后break再做处理
                break;
            }else{
                x[k] = x[k] + 1;
            }
        }
        if(x[k] < n && k == n - 1 && c[x[k]][x[0]] == 1){
            // 找到一条哈密尔顿回路
            for(k = 0; k<n; k++){
                printf("%d--", x[k]);
            }
            printf("%d\n", x[0]);
            return;
        }else if(x[k] && k < n - 1){
            // 设置当前顶点的访问标志,继续下一个顶点
            visited[x[k]] = 1;
            k = k + 1;
        }else{
            // 没有被访问过的邻接顶点,回退到上一个顶点
            x[k] = 0;
            visited[x[k]] = 0;
            k = k - 1;
        }

    }
}

int main(int argc, char const *argv[]){
    // n为顶点数量
    int n = 4;
    int c[4][4] = {{0,1,0,1},{1,0,1,0},{0,1,0,1},{1,0,1,0}};
    int x[4] = {0,1,2,3};
    hamiltion(4, x, c);
    return 0;
}

3. 邻接矩阵截图

在这里插入图片描述

4. 结果截图

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王佑辉

老板,赏点吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值