#include<stdio.h>
#include<stdlib.h>
int a[10],book[10],n;
void adf(int step)
{
int i;
if(step==n+1)
{
for(i=1;i<=n;i++)
printf("%d",a[i]);
printf("\n");
return;
}
for(i=1;i<=n;i++)
{
if(0==book[i])
{
a[step]=i;
book[i]=1;
adf(step+1);
book[i]=0;
}
}
}
int main(){
scanf("%d",&n);
adf(1);
// printf("%d",s);
system("pause");
return 0;
}
第一次执行完return回到adf(step+1)这,具体接下来是怎么样的,能帮我说一下132是怎么排出来的么,具体此时的执行过程,谢谢!
for(i=1;i<=n;i++)
{
if(0==book[i])
{
a[step]=i;
book[i]=1;
adf(step+1);
book[i]=0;
/* å½ä¸æ¬¡å ¨æ°æåå®æ¯å,éå½éæ åå°è¿é,å°åå设置çå¼é置为0, æ¯å¦ä¸æ¬¡è®¾ç½®äºi=3,å³ç´¢å¼ä¸º3çå¼è®¾ä¸º0(å³å¼ä¸º123ä¸ç3) ç¶åå¤æ循ç¯ä½iæ¯å¦å°äºçäºn,å¦æçäºnï¼å继ç»éæ åå°ç´¢å¼ä¸º2çä½ç½®,继ç»æç´¢å¼ä¸º2çå¼é置为0,ç´§æ¥çi++ï¼iç±2å为3,å³a[2]=3,å次éå½è°ç¨,stepç±2åæ3ï¼ä¸æ»¡è¶³n+1ï¼åè¿å ¥for循ç¯å½i=2æ¶æ»¡è¶³æ¡ä»¶ï¼å¹¶å°i=2çå¼èµç»a[step]=2 ==a[3]=2 } ä¾æ¤ç±»æ¨ããã
å®çæ§è¡è¿ç¨å°±æ¯ç±æ«ç«¯å¾å端æ¹å两两交æ¢å ç´ çï¼å ¶ä¸bookæ¯ç¨æ¥æ¯å¦äº¤æ¢è¿çæ è®° å 为æ¯ä¸æ¬¡å ¨æåå®å,é½è¦å°å®é置为0,æ以å¨éå½è°ç¨å½æ°ä¸ä¸ä¼æä¸ä¸ªbook[i]=1åbook[i]=0çæ è®°ã
å®çå¼çååæ¯ç¨for循ç¯çå¢éiæ¥æ§å¶çãå¦æä½ å¦è¿æ çè¯ï¼ç¸ä¿¡è¿ä¸ªç®æ³å¾å¥½ç解ã*/
}追é®
{
if(0==book[i])
{
a[step]=i;
book[i]=1;
adf(step+1);
book[i]=0;
/* å½ä¸æ¬¡å ¨æ°æåå®æ¯å,éå½éæ åå°è¿é,å°åå设置çå¼é置为0, æ¯å¦ä¸æ¬¡è®¾ç½®äºi=3,å³ç´¢å¼ä¸º3çå¼è®¾ä¸º0(å³å¼ä¸º123ä¸ç3) ç¶åå¤æ循ç¯ä½iæ¯å¦å°äºçäºn,å¦æçäºnï¼å继ç»éæ åå°ç´¢å¼ä¸º2çä½ç½®,继ç»æç´¢å¼ä¸º2çå¼é置为0,ç´§æ¥çi++ï¼iç±2å为3,å³a[2]=3,å次éå½è°ç¨,stepç±2åæ3ï¼ä¸æ»¡è¶³n+1ï¼åè¿å ¥for循ç¯å½i=2æ¶æ»¡è¶³æ¡ä»¶ï¼å¹¶å°i=2çå¼èµç»a[step]=2 ==a[3]=2 } ä¾æ¤ç±»æ¨ããã
å®çæ§è¡è¿ç¨å°±æ¯ç±æ«ç«¯å¾å端æ¹å两两交æ¢å ç´ çï¼å ¶ä¸bookæ¯ç¨æ¥æ¯å¦äº¤æ¢è¿çæ è®° å 为æ¯ä¸æ¬¡å ¨æåå®å,é½è¦å°å®é置为0,æ以å¨éå½è°ç¨å½æ°ä¸ä¸ä¼æä¸ä¸ªbook[i]=1åbook[i]=0çæ è®°ã
å®çå¼çååæ¯ç¨for循ç¯çå¢éiæ¥æ§å¶çãå¦æä½ å¦è¿æ çè¯ï¼ç¸ä¿¡è¿ä¸ªç®æ³å¾å¥½ç解ã*/
}追é®
谢谢æ¨ç解çï¼ä¸è¿æè¿æ³é®ä¸ä¸ï¼æç´¢å¼ä¸º3çå¼è®¾ä¸º0 åï¼ç¶åå¤æ循ç¯ä½iæ¯å¦å°äºçäºn,为ä»ä¹çäºnçæ¶åï¼è¦æ¨æ åç´¢å¼ä¸º2çä½ç½®åï¼
温馨提示:答案为网友推荐,仅供参考