1到9的全排列(用深搜 語言c++)

來源:互聯網
上載者:User

標籤:bsp   dfs   sync   int   資料   遞增   ret   using   迴圈   

c++代碼:

#include<bits/stdc++.h>
using namespace std;
#define fo(i,a,b) for(int i=a;i<=b;i++)
bool visit[11];
int a[10];
void dfs(int index)
{
 ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);//使c++輸出和c一樣快
 if(index==10)
 {
  cout<<a[1]<<a[2]<<a[3]<<a[4]<<a[5]<<a[6]<<a[7]<<a[8]<<a[9]<<endl;
  return;
 }
 fo(i,1,9)
 {
  if(!visit[i])
  {
   visit[i]=true;
   a[index]=i;
   dfs(index+1);
   visit[i]=false;
  }
 }
}
int main()
{
 dfs(1);
 return 0;
}

順便附帶c代碼(666):

#include<stdio.h>
int a[10];
bool visit[11];
void dfs(int index)
{
 if(index==10)
 {
  printf("%d%d%d%d%d%d%d%d%d\n",a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9]);
  return;
 }
 for(int i=1;i<=9;i++)
 if(!visit[i])
 {
  visit[i]=true;
  a[index]=i;
  dfs(index+1);
  visit[i]=false;
 }
}
int main()
{
 dfs(1);
 return 0;
}

關於這裡dfs裡面遞迴的個人解讀:(第一組資料123456789到第二組資料123456798的變化過程)

先看第一組資料,一定是遞增的123456789;直接看當index=9後(a1-a9依次賦值為1-9),dfs(index+1/*等於10*/)開始輸出123456789,第9層迴圈也結束了;於是返回的是上一個迴圈,也就是第8層迴圈的位子,順便提帶下,此時visit[9]已經再次賦值為false了(從bool定義後為false後,用了變為true,結束使用後重新為false),但visit[1]-visit[7]還是true狀態(且此時a1-a7還是被賦值為1-7,index值還是為8,而i值由於結束了第9層迴圈由8(i++)變為9,由於第8層的i=8的遞迴結束了,visit[8]也變為false),所以a8被賦予9(因為此時第8層迴圈是i=9開始的),visit[9]同時變為true狀態,接下來又進入第9層迴圈(i從1開始),但因為此時只有visit[8]為false,故dfs(9)會將a9=8;最後就是dfs(10)輸出123456798了;然後visit[7]visit[8]和visit[9]變為false,進入第7層迴圈,且第7層的i變為8...

/*

visit[i]=true;

...

visit[i]=false;

這裡可以理解為,i一旦變換,原來的visit[i]就會變為false;因為在進入visit[i]等於true後,一旦i變化了,就說明這i裡的遞迴結束了,則執行visit[i]=false;再執行i++,這樣i才會變化。所以i值變化,則原來的visit[i]一定重新變為false(至少我是這樣想的)

*/

1到9的全排列(用深搜 語言c++)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.