- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
一,马步程序
简要算法描述:
算法从1号节点作为当前节点开始进行搜索。从小到大深度优先尝试所有相连的节点,并把它作为下一次 搜索的当前节点,如果最终能够回到起始点,并且每个节点经过且仅经过一次,则存在一条哈密顿回路。否则不 存在哈密顿回路。
优化:
如果走一步之后发现,存在度数小于2的未走过的节点,则没有必要继续搜索,只能尝试其他节点。
如果发现,当前存在大于等于两个度数为2的节点,则直接回溯到上一层节点,没有必要继续搜索。
回溯到第一个节点后,如果没找到哈密顿回路则直接退出,没有必要尝试其他走法,因为另一条路径与当 前遍历过的路径是对称的。
#inelude iostream
#inelude cstdio
#inelude cstring
using namespace std;
const int Maxn = 10000;
int dirx[] = {-1,?2,1, 2, 2, 1};
int diry[] = {-2,1, 2, 2, 1,?2};
int nl, n2, n;
bool used[Maxn];
int ans[Maxn];
int degree[Maxn]? deg[Maxn];
int graph[Maxn][8];
bool valid(int x, int y)
{
return x = 0 x nl y = 0 y n2;
}
void getGraph()
{
for (int i = 0; i n; ++i)
{
int row = i / n2;
int col = i % n2;
degree[i] = 0;
for (int j = 0; j 8; ++j)
{
int x = row + dirx[j];
int y = col + diry[j];
if (!valid(x, y)) tontinue;
graph[i][degree[i]++] = x * n2 + y;
}
deg[i] = degreefi];
}
void resume(int cur)
{
for (int i = 0; i degree[cur]; ++i)
{
int next = graph[cur][i];
if (used[next]) continue;
deg[next]++;
}
}
bool update(int cur)
{
bool ret = true;
for (int i = 0; i degree[cur]; ++i)
{
int next = graph[cur][i];
if (used[next]) continue;
deg[next]
if (deg[next] 2 next != graph[0][l]) ret = false;
}
if (!ret)
{
resume(cur);
return false;
}
return true;
} bool dfs(int step,int cur) //递归版
{
ans[step] = cur;
if (step == n ? 1)
{
if (graph[0][1] != cur) return false; for (int i = 0; i n; ++i)
printf(n%d , ans[i]);
puts (????);
return true;
}
for (int i = 0; i degree[cur]; ++i) {
if (cur == 0 i) break;
int next = graph[cur][i];
if (used[next]) continue;
used[next] = true;
if (lupdate(cur))
{
used[next] = false; continue;
}
if (dfs(step + 1, next)) return true; resume(cur);
used[next] = false;
} return false;
}
bool check()// goto 版
{
int w[Maxn] = {0};
memset(used, false, sizeof(used)); int cur = 0, next;
used[0] = true;
int
10:
i, step = 0;
i = -1^ ans[step] = cur;
if (step == n - 1)
{
if (graph[0][1] != cur) goto 12;
for (int i = 0; i n; ++i) printf(H%d ans[i]);
puts (???);
return true;
}
11:
w[st
您可能关注的文档
最近下载
- 资料员工作内容.docx VIP
- P气瓶充装证考试题库及答案.doc VIP
- 上海市杨浦区2023-2024学年七年级下学期期中英语试卷 .docx VIP
- 2025年高考真题解析课件:2025年全国新高考二卷英语读后续写(课件).pptx VIP
- 贵阳市中心城区控制性详细规划(总则)——乌当组团.pdf VIP
- 图书出版合同(合同范本)7篇.docx VIP
- (正式版)D-L∕T 1770-2017 抽水蓄能电站输水系统充排水技术规程.docx VIP
- 《结构全寿命维护》课程教学大纲(本科).docx VIP
- SI、PI协同的EMI分析—打印版.pdf
- Unit2 Travelling Around Discovering Useful Structures 课件-2024-2025学年高中英语人教版(2019)必修第一册.pptx VIP
原创力文档


文档评论(0)