麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 開發設計 > 正文

全排列的兩種解法(dfs和STL)

2019-11-11 05:10:23
字體:
來源:轉載
供稿:網友

首先寫簡單的那種、用STL模板里有一個神奇的函數叫做next_permutation(a,a+n)返回值為bool型,用來判斷還有沒有排列。記住先是字典序,才能用它產生去全排列。 轉自http://blog.sina.com.cn/s/blog_60bf5fda0101dufm.html http://acm.swust.edu.cn/oj/PRoblem/140/ code:

#include#includeusing namespace std;char str[15];int main(){ int n,i,j; while(scanf("%d",&n)!=EOF) { for(i=0;i str[i]=i+'1'; str[n]='/0'; do { printf("%s/n",str); }while(next_permutation(str,str+n)); } return 0;}

第二種方法就是dfs:

#include#includeusing namespace std;int str[15];//保存輸出的字母表int visit[15];//標記是否讀過int n;void dfs(int depth)//深度、也就是每次dfs增加一個數字、直到N個數字的時候輸出{ int i,j; for(i=1;i<=n;i++)//遍歷N個數字 { if(visit[i]==0)//如果沒有讀過此數字、則將這個數字放進輸出表中、 { str[depth]=i; visit[i]=1;//標記為已打印 if(depth dfs(depth+1); else//滿足題意、已經得到N個數,則打印出來 { for(j=1;j<=n;j++) printf("%d",str[j]); printf("/n"); } visit[i]=0;//如果已經打印一行之后、把以前的重新標記為未讀 } }}int main(){ int i,j; scanf("%d",&n); memset(visit,0,sizeof(visit)); dfs(1); return 0;}

怎么說了、這個代碼還是很好理解的、 假設N=3 那么第一次循環、123、沒有問題 當運行打印的之后、將3標記為未讀、則為13、再往前回溯、得到2、則輸出132 繼續往前回溯、for循環已經過了一遍、 所以開頭為2、所以是213 同理就是231 同理就是 312 321 仔細想一下就是這樣了


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 国产精品美女一区二区 | 精品一区二区三区中文字幕老牛 | 国产精品99久久久久久久女警 | 99精品视频在线导航 | 久青草免费视频 | 亚洲一二区精品 | 黄片一级毛片 | 成人午夜a | 九九视频精品在线观看 | 成人在线精品视频 | 久久手机在线视频 | 欧美中文字幕一区二区 | 黄在线免费看 | 免费男女视频 | 在线2区 | 毛片一级免费看 | 日韩一级免费毛片 | 成人短视频在线观看免费 | 欧美一级不卡视频 | 日本在线视频免费 | 一区二区三区小视频 | 老师你怎么会在这第2季出现 | 羞羞视频一区二区 | 精品久久久av | 国内精品久久久久久久影视红豆 | av在线收看 | 久久精品一区视频 | 成人在线第一页 | 毛片国产 | 成年人黄色免费电影 | 97精品视频在线观看 | 黄网站免费在线看 | 日本一区视频在线观看 | 成年人小视频在线观看 | freexxx69性欧美hd | 91美女视频在线观看 | 日本一区二区在线看 | 99re热视频这里只精品 | 日韩av电影在线免费观看 | 国产91丝袜在线播放 | 精品成人免费一区二区在线播放 |