用mips汇编实现哈密尔顿回路
用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汇编实现哈密尔顿回路相关推荐
- 欧拉回路和哈密尔顿回路
"哈密尔顿回路问题"与"欧拉回路问题"看上去十分相似,然而却是完全不同的两个问题."哈密尔顿回路问题"是访问除原出发结点以外的每个结点一次且 ...
- java哈密尔顿回路算法,用回溯方法求哈密尔顿回路——java求解
// 哈密尔顿回路问题 public class Hamilton { // 图中顶点个数为n,图的邻接矩阵为c[][],存放回路的顶点序号x[],在这里,n个顶点的标号是:0,1,2,...,n-1 ...
- 最短汉密尔顿回路算法c语言,【算法】浅谈最短哈密尔顿回路类问题的两种近似算法...
// 标题是糊弄人的 1. 问题引入 给出一张图,求其最短哈密尔顿回路,也就是 "旅行商问题"(Traveling Saleman Problem,TSP) 假设有一个旅行商人要拜 ...
- 哈密尔顿道路与哈密尔顿回路
简介 1857年爱尔兰数学家哈密尔顿发明了"周游世界"玩具,用一个正十二面体的20个顶点表示世界上20个大城市,30条棱代表这些城市之间的道路.要求游戏者从任意一个城市(即顶点)出 ...
- “欧拉回路”与“哈密尔顿回路”
1.欧拉回路 17世纪的东普鲁士有一座哥尼斯堡(Konigsberg)城(现为俄国的加里宁格勒(Kaliningrad)城),城中有一座奈佛夫(Kneiphof)岛,普雷格尔(Pregol)河的两条支 ...
- 什么是哈密尔顿回路/路径?
一:哈密尔顿回路与哈密尔顿路径 1859 年,爱尔兰数学家哈密尔顿(Hamilton)提出了一个"周游世界"的游戏: 在一个正十二面体的二十个顶点上,标注了伦敦,巴黎,莫斯科等世界 ...
- 哈密尔顿回路(旅行售货员问题)
哈密尔顿回路(旅行售货员问题) 哈密顿图(哈密尔顿图)(英语:Hamiltonian path,或Traceable path)是一个无向图,由天文学家哈密顿提出,由指定的起点前往指定的终点,途中经过 ...
- 蓝桥杯 哈密尔顿回路 Java
问题描述 给出一个有向图,输出这个图的一个哈密尔顿回路. 输入格式 输入的第一行包含两个整数n, m,分别表示图的点数和边数. 接下来m行,每行包含两个整数,表示一条边的起点和终点. 输出格式 输出一 ...
- 哈密尔顿回路 - 杂录
哈密尔顿回路 1859年,爱尔兰数学家哈密尔顿(Hamilton) 提出了一个周游世界的游戏 在正十二面体上依次标记伦敦.巴黎.莫斯科等世界著名大城市, 正十二面体的棱表示连接这些城市的路线. 试问能 ...
最新文章
- ANSYS报错Accelerations are exceeding internal limit解决方法
- 公司为何要对薪水保密?
- oracle安装后怎么连接数据库,安装完odp后,连接oracle数据库
- android开发启动画面,Android开发笔记——如何正确实现App启动页
- ElasticSearch6.x 7.x Elasticdump 在线安装、离线安装
- Ruby编程语言学习笔记4
- UE3 预计算可见性
- 聚划算的夜场新生意 “三叉戟”打通夜间消费命脉
- ajax传图片的方法
- 正则表达式在java中的用法
- ARM指令集发展概述
- 单链表 和 顺序表 实现的 通讯录
- 有关i386和i686
- 温习Java和基础汇总
- Rust游戏引擎Bevy初探
- 远程桌面之客户端连接(MAC远程Windows桌面)
- 从二维到三维,可见Web3D技术的重要性,让线上3D产品展示所见即所得
- 前端小白写了个网页版五子棋游戏,使用原生 JS + Canvas 实现绘制棋子、棋盘
- iOS代码质量要求_图片压缩(iOS)
- warpAffine函数解析
热门文章
- 做好PPT-- PPT才是最容易赚钱和涨薪的技能,没有之一!
- EF框架,认识一下!
- obs多开教程_做了个OBS多路推流插件
- 大数据从业人员需要哪些技能?
- 我们的法兰西岁月-3
- 视频二维码加密码(密码播放功能)
- CleanShot X:屏幕截图、录屏、滚动截图、标注一个都不少
- Android require a foreground service of type ServiceInfo.FOREGROUND_SERVICE
- android.intent.action.view 融云,使用融云SDK遇到的一些问题
- 调剂系统服务器错误,2020考研调剂系统常见问题汇总!