用mips汇编实现哈密尔顿回路.

哈密顿回路是一个非常经典的问题

题目难度不大,虽然是np的但是只需要你写一个非多项式的实现算法。

我们先回顾一下怎么用c++实现

#include <bits/stdc++.h>#define REP(I,A,B) for (int I=(A),I##_END_=(B);I<=I##_END_;I++)
#define FOR(I,A,B) for (int I=(A),I##_END_=(B);I<I##_END_;I++)
#define REPD(I,A,B) for (int I=(A),I##_END_=(B);I>=I##_END_;I--)int n,m;
int cnt[101];using namespace std;int get_id(int x,int y){return (x-1)*n+y;
}int mark;
int a[101];
int all=0;void dfs(int p){if (p==n+1){all |= cnt[ get_id( a[n],a[1] ) ];return ;}elsefor (int i=1;i<=n;i++)if (((mark>>i)&1)==0 && cnt[ get_id( a[p-1] , i) ] ){mark ^= 1<<i;a[p]=i;dfs(p+1);mark ^= 1<<i;}
}int main(){scanf("%d%d",&n,&m);int x,y;REP(i,1,m){scanf("%d%d",&x,&y);cnt[get_id(x,y)]=cnt[get_id(y,x)]=1;}mark=2;a[1]=1;dfs(2);printf("%d\n",all);return 0;
}

基本实现如下

.dataarray_had: .space 800array_a: .space 80char_space: .asciiz " "char_endl: .asciiz "\n".textmain:la $s0,array_hadla $s1,array_a
#la $s2,int_n
#la $s3,int_m
#la $s4,int_all
#la $s5,int_markli $s4,0li $s5,2
#oneli $s6,1 li $v0,5syscallmove $s2,$v0li $v0,5syscallmove $s3,$v0# for mli $t1,0for_m_st:beq $t1,$s3,for_m_ednopli $v0,5syscallmove $t6,$v0li $v0,5syscallmove $t7,$v0move $a0,$t6move $a1,$t7jal get_idmul $v0,$v0,4add $t2,$s0,$v0 sw $s6,0($t2)#swapmove $a0,$t7move $a1,$t6jal get_idmul $v0,$v0,4add $t2,$s0,$v0sw $s6,0($t2)addi $t1,$t1,1j for_m_stnopfor_m_ed:sw $s6,4($s1)li $a0,2jal dfsmove $a0,$s4li $v0,1syscallli $v0,10syscallget_id:mul $a0,$a0,$s2add $v0,$a0,$a1jr $31dfs:sw $ra,0($sp)subi $sp,$sp,4sw $a0,0($sp)subi $sp,$sp,4bgt $a0,$s2,if_check_thennopj if_check_endif_check_then:li $t1 1mul $t1,$t1,4add $t1,$t1,$s1lw $t1,0($t1)move $a0,$t1move $t1,$s2mul $t1,$t1,4add $t1,$t1,$s1lw $t1,0($t1)move $a1,$t1jal get_idmul $v0,$v0,4add $t1,$s0,$v0lw $t1,0($t1)or $s4,$s4,$t1addi $sp,$sp,4addi $sp,$sp,4lw $ra,0($sp)jr $31if_check_end:bne $a0,$0,dfs_workdfs_work:#for_dfsli $t1,1for_dfs_st:bgt $t1,$s2,for_dfs_ednopsllv $t2,$s6,$t1and $t2,$s5,$t2seq $t2,$t2,0addi $sp,$sp,4lw $t3,0($sp)subi $sp,$sp,4sub $t3,$t3,1mul $t3,$t3,4add $t3,$t3,$s1lw $t3,0($t3)move $a0,$t3move $a1,$t1jal get_idmul $v0,$v0,4add $t3,$v0,$s0lw $t3,0($t3)and $t2,$t2,$t3beq $t2,$s6,if_mark_thennopj if_mark_endif_mark_then:# t3  = a0addi $sp,$sp,4lw $t3,0($sp)subi $sp,$sp,4sw $s5,0($sp)subi $sp,$sp,4sllv $t2,$s6,$t1or $s5,$s5,$t2mul $t2,$t3,4add $t2,$s1,$t2sw $t1,0($t2)sw $t1,0($sp)subi $sp,$sp,4addi $a0,$t3,1jal dfsaddi $sp,$sp,4lw $t1,0($sp)addi $sp,$sp,4lw $s5,0($sp)if_mark_end:addi $t1,$t1,1j for_dfs_stfor_dfs_ed:addi $sp,$sp,4addi $sp,$sp,4lw $ra,0($sp)jr $31

用mips汇编实现哈密尔顿回路相关推荐

  1. 欧拉回路和哈密尔顿回路

    "哈密尔顿回路问题"与"欧拉回路问题"看上去十分相似,然而却是完全不同的两个问题."哈密尔顿回路问题"是访问除原出发结点以外的每个结点一次且 ...

  2. java哈密尔顿回路算法,用回溯方法求哈密尔顿回路——java求解

    // 哈密尔顿回路问题 public class Hamilton { // 图中顶点个数为n,图的邻接矩阵为c[][],存放回路的顶点序号x[],在这里,n个顶点的标号是:0,1,2,...,n-1 ...

  3. 最短汉密尔顿回路算法c语言,【算法】浅谈最短哈密尔顿回路类问题的两种近似算法...

    // 标题是糊弄人的 1. 问题引入 给出一张图,求其最短哈密尔顿回路,也就是 "旅行商问题"(Traveling Saleman Problem,TSP) 假设有一个旅行商人要拜 ...

  4. 哈密尔顿道路与哈密尔顿回路

    简介 1857年爱尔兰数学家哈密尔顿发明了"周游世界"玩具,用一个正十二面体的20个顶点表示世界上20个大城市,30条棱代表这些城市之间的道路.要求游戏者从任意一个城市(即顶点)出 ...

  5. “欧拉回路”与“哈密尔顿回路”

    1.欧拉回路 17世纪的东普鲁士有一座哥尼斯堡(Konigsberg)城(现为俄国的加里宁格勒(Kaliningrad)城),城中有一座奈佛夫(Kneiphof)岛,普雷格尔(Pregol)河的两条支 ...

  6. 什么是哈密尔顿回路/路径?

    一:哈密尔顿回路与哈密尔顿路径 1859 年,爱尔兰数学家哈密尔顿(Hamilton)提出了一个"周游世界"的游戏: 在一个正十二面体的二十个顶点上,标注了伦敦,巴黎,莫斯科等世界 ...

  7. 哈密尔顿回路(旅行售货员问题)

    哈密尔顿回路(旅行售货员问题) 哈密顿图(哈密尔顿图)(英语:Hamiltonian path,或Traceable path)是一个无向图,由天文学家哈密顿提出,由指定的起点前往指定的终点,途中经过 ...

  8. 蓝桥杯 哈密尔顿回路 Java

    问题描述 给出一个有向图,输出这个图的一个哈密尔顿回路. 输入格式 输入的第一行包含两个整数n, m,分别表示图的点数和边数. 接下来m行,每行包含两个整数,表示一条边的起点和终点. 输出格式 输出一 ...

  9. 哈密尔顿回路 - 杂录

    哈密尔顿回路 1859年,爱尔兰数学家哈密尔顿(Hamilton) 提出了一个周游世界的游戏 在正十二面体上依次标记伦敦.巴黎.莫斯科等世界著名大城市, 正十二面体的棱表示连接这些城市的路线. 试问能 ...

最新文章

  1. ANSYS报错Accelerations are exceeding internal limit解决方法
  2. 公司为何要对薪水保密?
  3. oracle安装后怎么连接数据库,安装完odp后,连接oracle数据库
  4. android开发启动画面,Android开发笔记——如何正确实现App启动页
  5. ElasticSearch6.x 7.x Elasticdump 在线安装、离线安装
  6. Ruby编程语言学习笔记4
  7. UE3 预计算可见性
  8. 聚划算的夜场新生意 “三叉戟”打通夜间消费命脉
  9. ajax传图片的方法
  10. 正则表达式在java中的用法
  11. ARM指令集发展概述
  12. 单链表 和 顺序表 实现的 通讯录
  13. 有关i386和i686
  14. 温习Java和基础汇总
  15. Rust游戏引擎Bevy初探
  16. 远程桌面之客户端连接(MAC远程Windows桌面)
  17. 从二维到三维,可见Web3D技术的重要性,让线上3D产品展示所见即所得
  18. 前端小白写了个网页版五子棋游戏,使用原生 JS + Canvas 实现绘制棋子、棋盘
  19. iOS代码质量要求_图片压缩(iOS)
  20. warpAffine函数解析

热门文章

  1. 做好PPT-- PPT才是最容易赚钱和涨薪的技能,没有之一!
  2. EF框架,认识一下!
  3. obs多开教程_做了个OBS多路推流插件
  4. 大数据从业人员需要哪些技能?
  5. 我们的法兰西岁月-3
  6. 视频二维码加密码(密码播放功能)
  7. CleanShot X:屏幕截图、录屏、滚动截图、标注一个都不少
  8. Android require a foreground service of type ServiceInfo.FOREGROUND_SERVICE
  9. android.intent.action.view 融云,使用融云SDK遇到的一些问题
  10. 调剂系统服务器错误,2020考研调剂系统常见问题汇总!