C Codes
#include<bits/stdc++.h>
using namespace std;
int a[10];
int b[10];
void dfs(int k){
if (k>5){
for (int i=1; i<=5; i++)
cout<<a[i]<<' ';
cout<<'\n';
}
else{
for (int i=1; i<=5; i++){
if (!b[i]){
b[i]=1; a[k]=i;
dfs(k+1);
b[i]=0;
}
}
}
return;
}
int main(){
dfs(1);
return 0;
}
Assembly Codes
AREA reset,CODE, READONLY
CODE32
ENTRY
N EQU 5
start
LDR R0,=0x0000001D ;a
LDR R1,=0x00000105 ;b
LDR R2,=0x000001D0 ;val
LDR R3,=0x00000244 ;i
MOV R4,#1
B dfs
dfs
CMP R4,N ;k
BGT return
MOV R5,#1
B Loop
Loop
CMP R5,#6 ;for (i=1; i<=5; i++)
BEQ return ;return
LDR R6,[R1,R5,LSL #2]
CMP R6,#0
ADDNE R5,R5,#1
;save state
STREQ R4,[R2,#4]!
STREQ R5,[R3,#4]!;if (b[i]==0)
BNE Loop
; if (!b[i])
STREQ R5,[R0,R4,LSL #2] ;a[k]=i
MOVEQ R6,#1
STREQ R6,[R1,R5,LSL #2]; b[i]=1;
ADDEQ R4,R4,#1 ;k=k+1
BLEQ dfs ;dfs(k+1)
MOV R6,#0
STR R6,[R1,R5,LSL #2] ;b[i]=0
ADD R5,R5,#1
CMP R5,#6;
BEQ return
BNE Loop
return
LDR R4,[R2]
SUB R2,R2,#4
LDR R5,[R3]
SUB R3,R3,#4
; BEQ start
MOV PC,LR
end