当前位置:网站首页>HDU 4337 King Arthur' S Knights it outputs a Hamiltonian circuit
HDU 4337 King Arthur' S Knights it outputs a Hamiltonian circuit
2022-07-07 03:11:00 【Full stack programmer webmaster】
Hello everyone , I meet you again , I'm the king of the whole stack
n integral m The article has no direction
It outputs a Hamiltonian circuit
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
const int N = 155;
int n, m;
bool mp[N][N];
int S, T, top, Stack[N];
bool vis[N];
void _reverse(int l,int r) {
while (l<r)
swap(Stack[l++],Stack[r--]);
}
void expand() {
while(1) {
bool flag = 0;
for (int i=1; i<=n && false == flag; i++)
if (!vis[i] && mp[T][i])
{
Stack[top++]=i;
T=i;
flag = vis[i] = 1;
}
if (!flag) return;
}
}
void hamiltun(int Start){
memset(vis, 0, sizeof vis);
S = Start;
for(T=2; T<=n; T++) // Randomly find two adjacent nodes S and T
if (mp[S][T]) break;
top = 0;
Stack[top++]=S;
Stack[top++]=T;
vis[S] = vis[T] = true;
while (1)
{
expand(); // On the basis of them, expand a path without repeated nodes as long as possible : step 1
_reverse(0,top-1);
swap(S,T);
expand(); // On the basis of them, expand a path without repeated nodes as long as possible
int mid=0;
if (!mp[S][T]) // if S And T Not adjacent , Can construct a circuit to make a new S and T adjacent
{
// Set path S→T There are k+2 Nodes , In turn S,v1,v2…… vk and T.
// It can prove the existence of nodes vi,i∈[1,k), Satisfy vi And T adjacent , And vi+1 And S adjacent
for (int i=1; i<top-2; i++)
if (mp[Stack[i]][T] && mp[Stack[i+1]][S])
{
mid=i+1; break;
}
// Turn the original path into S→vi→T→vi+1→S, It forms a loop
_reverse(mid,top-1);
T=Stack[top-1];
}
if (top==n) break;
// Now we have a loop without repeating nodes . Suppose its length is N, Then Hamilton loop is found
// otherwise , Because the whole graph is connected , So in this loop , There must be a point adjacent to a point outside the loop
// Then disconnect the circuit from that point , It's a path back , Then follow the steps 1 Try to expand the path
for (int i = 1, j; i <= n; i++)
if (!vis[i])
{
for (j=1; j<top-1; j++)
if (mp[Stack[j]][i]) break;
if (mp[Stack[j]][i])
{
T=i; mid=j;
break;
}
}
S=Stack[mid-1];
_reverse(0,mid-1);
_reverse(mid,top-1);
Stack[top++]=T;
vis[T]=true;
}
}
int main() {
while (cin>>n>>m) {
memset(mp, 0, sizeof mp);
for (int i = 1, u, v; i <= m; i++) {
scanf("%d %d",&u, &v);
mp[u][v] = mp[v][u] = 1;
}
hamiltun(1);
for (int i = 0; i < top; i++)
printf("%d%c", Stack[i], i==top-1?'\n':' ');
}
return 0;
}Copyright notice : This article is the original article of the blogger , Blog , Do not reprint without permission .
Publisher : Full stack programmer stack length , Reprint please indicate the source :https://javaforall.cn/116761.html Link to the original text :https://javaforall.cn
边栏推荐
- Lingyun going to sea | yidiantianxia & Huawei cloud: promoting the globalization of Chinese e-commerce enterprise brands
- How to analyze fans' interests?
- Redis入门完整教程:复制拓扑
- c语言字符串排序
- 尚硅谷JVM-第一章 类加载子系统
- SSL证书错误怎么办?浏览器常见SSL证书报错解决办法
- Kubernetes source code analysis (II) -- resource
- tensorboard的使用
- leetcode
- How to design interface test cases? Teach you a few tips to draft easily
猜你喜欢

Cryptography series: detailed explanation of online certificate status protocol OCSP

Error: could not find a version that satisfies the requirement xxxxx (from versions: none) solutions

A complete tutorial for getting started with redis: RDB persistence

杰理之开启经典蓝牙 HID 手机的显示图标为键盘设置【篇】

OC, OD, push-pull explanation of hardware

Utilisation de la promesse dans es6
Django database (SQLite) basic introductory tutorial

Redis入门完整教程:复制拓扑

The annual salary of general test is 15W, and the annual salary of test and development is 30w+. What is the difference between the two?

Detailed explanation of 19 dimensional integrated navigation module sinsgps in psins (time synchronization part)
随机推荐
巴比特 | 元宇宙每日必读:IP授权是NFT的破圈之路吗?它的难点在哪里?Holder该如何选择合作平台?...
Cocos2d-x box2d physical engine compilation settings
又一百万量子比特!以色列光量子初创公司完成1500万美元融资
[2022 national tournament simulation] polygon - computational geometry, binary answer, multiplication
Kubernetes源码分析(二)----资源Resource
Qt蓝牙:QBluetoothDeviceInfo
OC, OD, push-pull explanation of hardware
Redis入门完整教程:复制配置
Redis入门完整教程:客户端常见异常
Leetcode 77: combination
SQL中删除数据
tensorboard的使用
The whole process of knowledge map construction
How to design interface test cases? Teach you a few tips to draft easily
How does C language (string) delete a specified character in a string?
How-PIL-to-Tensor
杰理之播内置 flash 提示音控制播放暂停【篇】
Introduction to ins/gps integrated navigation type
Change your posture to do operation and maintenance! GOPs 2022 Shenzhen station highlights first!
Redis getting started complete tutorial: replication topology