1. 程式人生 > >深度優先搜尋解決全排列問題

深度優先搜尋解決全排列問題

題目:假如有編號為1、2、3的3張撲克牌和編號為1、2、3的3個盒子。現在需要將這3張撲克牌分別放到3個盒子裡,並且每個盒子有且只能放一張撲克牌。那麼一共有多少種不同的排法?

程式碼及註釋:

#include<stdio.h>
//全域性變數,陣列元素值自動初始化為0
int a[10];//充當盒子編號 
int book[10];//用book[i] = 0或1來表示撲克牌i是否在手上 
int n;
void DFS(int step)
{
	int i;
	if(step == n+1)//當step = n+1時表示前面的盒子都已經放滿撲克牌,這時列印九個盒子裡放的撲克牌對應號碼 
{ for (i=1; i<=n; i++) { printf("%d", a[i]); } printf("\n"); } for (i=1; i<=n; i++) { if (book[i] == 0)//判斷撲克牌i是否在手上 { a[step] = i;//將i號撲克牌放到第step個盒子裡面 book[i] = 1;//將book[i]設為1,表示i號撲克牌已經不在手上 DFS(step + 1);//接下來在第step + 1個盒子放牌 book[i] = 0; //將放回的撲克牌收回 } } } int main(
) { scanf("%d", &n); DFS(1);//首先對第一個盒子放牌 return 0; }

思考:_ _ + _ _ = _ _ _ + _ _ _從1 ~ 9中填入9個數,每個數不相同,使等式成立。
答案:https://blog.csdn.net/qq_43469554/article/details/85062377