当前位置:网站首页>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
边栏推荐
- How-PIL-to-Tensor
- 知识图谱构建全流程
- Redis入门完整教程:AOF持久化
- input_delay
- SQL Tuning Advisor一个错误ORA-00600: internal error code, arguments: [kesqsMakeBindValue:obj]
- 杰理之电话本获取【篇】
- 掘金量化:通过history方法获取数据,和新浪财经,雪球同用等比复权因子。不同于同花顺
- 腾讯云原生数据库TDSQL-C入选信通院《云原生产品目录》
- mos管实现主副电源自动切换电路,并且“零”压降,静态电流20uA
- Development of wireless communication technology, cv5200 long-distance WiFi module, UAV WiFi image transmission application
猜你喜欢

OC, OD, push-pull explanation of hardware

Appx代码签名指南

硬件之OC、OD、推挽解释

How to design interface test cases? Teach you a few tips to draft easily

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

Babbitt | metauniverse daily must read: is IP authorization the way to break the circle of NFT? What are the difficulties? How should holder choose the cooperation platform

input_delay

Nuggets quantification: obtain data through the history method, and use the same proportional compound weight factor as Sina Finance and snowball. Different from flush

Intelligent static presence detection scheme, 5.8G radar sensing technology, human presence inductive radar application

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?
随机推荐
Nuggets quantification: obtain data through the history method, and use the same proportional compound weight factor as Sina Finance and snowball. Different from flush
Redis getting started complete tutorial: client management
Lavel PHP artisan automatically generates a complete set of model+migrate+controller commands
Appx代码签名指南
Cocos2d-x box2d physical engine compilation settings
杰理之RTC 时钟开发【篇】
A complete tutorial for getting started with redis: AOF persistence
杰理之FM 模式单声道或立体声选择设置【篇】
从0开始创建小程序
首届“量子计算+金融科技应用”研讨会在京成功举办
换个姿势做运维!GOPS 2022 · 深圳站精彩内容抢先看!
杰理之关于 DAC 输出功率问题【篇】
密码学系列之:在线证书状态协议OCSP详解
uniapp的表单验证
unrecognized selector sent to instance 0x10b34e810
Babbitt | metauniverse daily must read: is IP authorization the way to break the circle of NFT? What are the difficulties? How should holder choose the cooperation platform
Kubernetes源码分析(二)----资源Resource
LeetCode 77:组合
Development of wireless communication technology, cv5200 long-distance WiFi module, UAV WiFi image transmission application
Redis getting started complete tutorial: common exceptions on the client