一.全排列问题
全排列问题 - 洛谷
题目要求如上
c语言代码如下:
mips汇编代码实现:
.data
symble:.space 32
array:.space 32
ar_sp:.asciiz" "
ar_en:.asciiz "n"
.text
li $v0,5
syscall
move $s0,$v0
li $s1,0 #index=s0
jal fullarray
li $v0,10
syscall
fullarray:
li $s2,0 #i=0
blt $s1,$s0,else
for1:
beq $s0,$s2,end_for1
sll $t1,$s2,2
lw $a0,array($t1)
li $v0,1
syscall
la $a0,ar_sp
li $v0,4
syscall
addi $s2,$s2,1
j for1
end_for1:
la $a0,ar_en
li $v0,4
syscall
jr $ra
else:
beq $s0,$s2,end_else
sll $s3,$s2,2
lw $t0,symble($s3) #t0=symble[i] s3=4*i
bgtz $t0,end_if
addi $s4,$s2,1
sll $s5,$s1,2
sw $s4,array($s5) #i+1=symble[index],s5=4*index
li $t1,1
sw $t1,symble($s3)
addi $sp,$sp,-12
sw $ra,0($sp)
sw $s1,4($sp)
sw $s2,8($sp)
addi $s1,$s1,1
jal fullarray
lw $ra,0($sp)
lw $s1,4($sp)
lw $s2,8($sp)
addi $sp,$sp,12
sll $s3,$s2,2
sw $0,symble($s3)
end_if:
addi $s2,$s2,1
j else
end_else:
jr $ra
二.将n分解成不多余m个数的和
DFS(搜索) - OI Wiki
c++语言代码如下:
mips汇编代码如下:
.data
array:.space 400
arr_sp:.asciiz " "
arr_en:.asciiz "n"
.text
li $v0,5
syscall
move $s0,$v0 #s0=n
li $v0,5
syscall
move $a1,$v0 #a1=m=n
li $s1,1 #i=s1
li $s2,1 #a=s2
jal dfs
li $v0,10
syscall
dfs:
bgt $s0,$0,else_dfs
li $t0,1
for1_begin:
beq $t0,$s1,for1_end
sll $t3,$t0,2
lw $a0,array($t3)
li $v0,1
syscall
la $a0,arr_sp
li $v0,4
syscall
addi $t0,$t0,1
j for1_begin
for1_end:
la $a0,arr_en
li $v0,4
syscall
else_dfs:
bgt $s1,$a1,end_dfs
move $t0,$s2
for2_begin:
bgt $t0,$s0,end_dfs
sll $t3,$s1,2
move $t5,$t0
sw $t5,array($t3)
addi $sp,$sp,-20
sw $ra,0($sp)
sw $s0,4($sp)#n
sw $s1,8($sp)#i
sw $s2,12($sp)#a
sw $t0,16($sp) #j
sub $s0,$s0,$t0
addi $s1,$s1,1
move $s2,$t0
jal dfs
lw $ra,0($sp)
lw $s0,4($sp)#n
lw $s1,8($sp)#i
lw $s2,12($sp)#a
lw $t0,16($sp)
addi $sp,$sp,20
addi $t0,$t0,1
j for2_begin
end_dfs:
jr $ra



