1. Non-recursive backtracking method
#include<stdio.h>
#include<string.h>
int main()
{
bool dig[10];
int a,b,c,d,e,m,n,s;
memset(dig,0,sizeof(dig));
for(a=1;a<=9;a++){
//兵
dig[a]=1;
for(b=0;b<=9;b++){
//炮
if(!dig[b]){
dig[b]=1;
for(c=0;c<=9;c++){
//马
if(!dig[c]){
dig[c]=1;
for(d=0;d<=9;d++){
//卒
if(!dig[d]){
dig[d]=1;
for(e=0;e<=9;e++){
//车
if(!dig[e]){
dig[e]=1;
m=a*1000+b*100+c*10+d;
n=a*1000+b*100+e*10+d;
s=e*10000+d*1000+c*100+a*10+d;
if(m+n==s)printf("兵:%d 炮:%d 马:%d 卒:%d 车:%d\n",a,b,c,d,e);
dig[e]=0;
}
}
dig[d]=0;
}
}
dig[c]=0;
}
}
dig[b]=0;
}
}
dig[a]=0;
}
return 0;
}