当前位置:网站首页>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
边栏推荐
- centerX: 用中国特色社会主义的方式打开centernet
- Software testing -- common assertions of JMeter interface testing
- How to design interface test cases? Teach you a few tips to draft easily
- sshd[12282]: fatal: matching cipher is not supported: [email protected] [preauth]
- 房费制——登录优化
- Unity使用MaskableGraphic画一条带箭头的线
- Lingyun going to sea | yidiantianxia & Huawei cloud: promoting the globalization of Chinese e-commerce enterprise brands
- New benchmark! Intelligent social governance
- DOMContentLoaded和window.onload
- Redis入门完整教程:复制原理
猜你喜欢

IDEA重启后无法创建Servlet文件的解决方案

Redis入门完整教程:AOF持久化

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

Redis getting started complete tutorial: replication configuration

Household appliance industry under the "retail is king": what is the industry consensus?
![[socket] ① overview of socket technology](/img/91/dccbf27a17418ea632c343551bccc0.png)
[socket] ① overview of socket technology

巴比特 | 元宇宙每日必读:IP授权是NFT的破圈之路吗?它的难点在哪里?Holder该如何选择合作平台?...

Form validation of uniapp

OC, OD, push-pull explanation of hardware

uniapp的表单验证
随机推荐
Use of promise in ES6
制作(转换)ico图标
凌云出海记 | 易点天下&华为云:推动中国电商企业品牌全球化
Matlab Error (Matrix dimensions must agree)
centerX: 用中国特色社会主义的方式打开centernet
Redis入门完整教程:RDB持久化
Data analysis from the perspective of control theory
【安全的办公和生产力应用程序】上海道宁为您提供ONLYOFFICE下载、试用、教程
DOMContentLoaded和window.onload
从控制理论的角度谈数据分析
Centerx: open centernet in the way of socialism with Chinese characteristics
杰理之FM 模式单声道或立体声选择设置【篇】
[secretly kill little partner pytorch20 days] - [Day1] - [example of structured data modeling process]
Unity使用MaskableGraphic画一条带箭头的线
杰理之RTC 时钟开发【篇】
Summary of research status of inertial navigation calibration at home and abroad (abridged version)
左程云 递归+动态规划
杰理之开 BLE 退出蓝牙模式卡机问题【篇】
Install redis from zero
Optimization of application startup speed