南陽理工學院 擅長排列的小明
一開始沒想出來,後來發現需要用到stl的一個函式,或者需要使用深度優先搜尋的方法,這兩者都是自己的知識盲點,故首先參考了這篇部落格 http://blog.csdn.net/whjkm/article/details/38498317 以及百度了深度優先搜尋的相關內容,發現dfs的本質實際上是遞迴+回溯。其程式碼的實現思路為:
DFS(頂點v)
{
標記v為已遍歷;
for(對於每一個鄰接v切未標記遍歷的店u)
DFS(u);
}
故需要一個標記陣列,表示每個點是否被訪問過。附AC程式碼之dfs:
#include<cstdio> #include<cstring> int visit[10]; int ans[10]; using namespace std; void dfs(int pos,int n,int m) { if(pos==m) { for(int i=0;i<m;i++) { printf("%d",ans[i]); } printf("\n"); } else { for(int i=1;i<=n;i++) { if(!visit[i]) { visit[i]=1; ans[pos]=i; dfs(pos+1,n,m); visit[i]=0; } } } //return ; } int main() { int N,n,m; scanf("%d",&N); while(N--) { scanf("%d%d",&n,&m); memset(visit,0,sizeof(visit)); dfs(0,n,m); } return 0; }
另通過本題的學習,明白了在使用遞迴函式時,當本層執行完畢時,會自動回溯返回上一層,無需新增程式碼中註釋的return。
AC程式碼之STL之next_permutation(a.begin(),a.end())函式:
next_permutation(a.begin(),a.end())函式:實現字串a按字典序的全排列。#include<iostream> #include<cstdio> #include<algorithm> #include<cstring> using namespace std; int main() { int N;//n,m; // string s1,s2;???(1) scanf("%d",&N); while(N--) { int n,m; string s1,s2;//???(2) scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) { s1+='0'+i; } s2=s1.substr(0,m); cout<<s2<<endl; while(next_permutation(s1.begin(),s1.end())) { if(s2!=s1.substr(0,m)) { s2=s1.substr(0,m); cout<<s2<<endl; } } } return 0; }
具體原理等可參考部落格:http://www.cnblogs.com/mycapple/archive/2012/08/13/2635853.html
通過本題的學習,發現cin,cout比scanf,printf慢,在越小範圍內定義變數越快。(見???(1)處和???(2)處)
相關推薦
南陽理工學院 擅長排列的小明
一開始沒想出來,後來發現需要用到stl的一個函式,或者需要使用深度優先搜尋的方法,這兩者都是自己的知識盲點,故首先參考了這篇部落格 http://blog.csdn.net/whjkm/article/details/38498317 以及百度了深度優先搜尋的相關內容,發現d
南陽oj 19 擅長排列的小明(dfs)
描述 小明十分聰明,而且十分擅長排列計算。比如給小明一個數字5,他能立刻給出1-5按字典序的全排列,如果你想為難他,在這5個數字中選出幾個數字讓他繼續全排列,那麼你就錯了,他同樣的很擅長。現在需要你寫一個程式來驗證擅長排列的小明到底對不對。 輸入 第一行輸入整數N(1<N<1
擅長排列的小明 (南陽oj 19)(1)
描述 小明十分聰明,而且十分擅長排列計算。比如給小明一個數字5,他能立刻給出1-5按字典序的全排列,如果你想為難他,在這5個數字中選出幾個數字讓他繼續全排列,那麼你就錯了,他同樣的很擅長。現在需要你寫一個程式來驗證擅長排列的小明到底對不對。 輸入 第一行輸入整數N(1<N<1
nyist oj 19 擅長排列的小明(dfs搜索+STL)
功能 asdf www play algorithm 是否 back using 上傳 擅長排列的小明 時間限制:1000 ms | 內存限制:65535 KB 難度:4 描寫敘述 小明十分聰明。並且十分擅長排列計算。比方給小明一個數字5,他能立馬給出1
nyoj-0469-擅長排列的小明 II(找規律)
for 題意 序列 簡便 DC span names n-1 href nyoj-0469-擅長排列的小明 II 思路:遞推分析:為了簡便起見,我們用Ai代表第i個數字 , 由於A1一直是1,所以A2只能是2或3。假設dp[n]表示1->n這個序列的方案數
K - 擅長排列的小明
#include<stdio.h> #include<string.h> int m,t,a[1000],b[1000]; void dfs(int f) { if(f==m+1) { for(int i=1;i<=m;i++) { printf("%
NYOJ 19 擅長排列的小明 (STL之next_permutation()的使用)
擅長排列的小明 時間限制:1000 ms | 記憶體限制:65535 KB 難度:4 描述 小明十分聰明,而且十分擅長排列計算。比如給小明一個數字5,他能立刻給出1-5按字典序的全排列,如果你想為難他,在這5個數字中選出幾個數字讓他繼續全排列,那麼你就錯了,他同樣的
nyoj 19 擅長排列的小明 【全排列(n中抽取m個數)】
擅長排列的小明 時間限制:1000 ms | 記憶體限制:65535 KB 難度:4 描述 小明十分聰明,而且十分擅長排列計算。比如給小明一個數字5,他能立刻給出1-5按字典序的全排列,如果你想為難他,在這5個數字中選出幾個數字讓他繼續全排列,那麼你就錯了,他同樣的
nyist oj 19 擅長排列的小明(dfs搜尋+STL)
擅長排列的小明 時間限制:1000 ms | 記憶體限制:65535 KB 難度:4 描述 小明十分聰明,而且十分擅長排列計算。比如給小明一個數字5,他能立刻給出1-5按字典序的全排列,
開心的小明(南陽oj49)(01背包)
put adding track ng- family text 設計 art can 開心的小明 時間限制:1000 ms | 內存限制:65535 KB 難度:4 描寫敘述小明今天非常開心。家裏購置的新房就要領鑰匙了,新房裏有一間他自己專用的非常寬
小明的存錢計劃 南陽acm54
light == 發現 可能 過程 內存 來源 AR display 小明的存錢計劃 時間限制:3000 ms | 內存限制:65535 KB 難度:2 描述 小明的零花錢一直都是自己管理。每個月的月初媽媽給小明300元錢,小明會預算這個月的花銷,並且總能做到實際花銷和
COGS 2687 討厭整除的小明
void lan problem pid http cst 聯通 oid pri 二次聯通門 : COGS 2687 討厭整除的小明 /* cogs 2687 討厭整除的小明 打表出奇跡.. 考場時看了一下樣例就感覺有非常鬼畜的做法。。
NYOJ 55 懶省事的小明(哈弗曼樹)
pad sans div sam time span border dsm 方案 懶省事的小明 時間限制:3000 ms | 內存限制:65535 KB 難度:3 描寫敘述 小明非常想吃果子,正好果園果子熟了。在果園裏,小明已經將全部的果子
SDUT 2766-小明傳奇2(母函數)
weight 方法 vector 不但 lua emc ask ++ file 小明傳奇2 nid=24#time" title="C、C++、go、haskell、lua、pascal Time Limit1000ms M
杭電 2096 小明A+B
miss script ava spa ace 個數 例如 mem ani 小明A+B Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Subm
hunnu11544:小明的煩惱——找字符串
字典 out 過程 自己 input body cto main ffffff Problem description 小明是個非常優秀的同學。他除了特別公正外,他也非常細心,當然老師肯定也知道,這不,老師又有事情找他幫忙了。老師每周都會給
hdu 4521 小明系列問題——小明序列(線段樹+DP或擴展成經典的LIS)
upd 輸入數據 accep 單位 行為 至少 tracking math 並且 小明系列問題——小明序列 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Ot
hunnu 11545小明的煩惱——找路徑 (最大流)
tro stdio.h class 屬於 max pre 如果 scrip 什麽 小明的煩惱——找路徑 Time Limit: 2000ms, Special Time Limit:5000ms, Memory Limit:32768KB
小明搬家_NOI導刊2010提高(05)
span long i++ 高效 效率 algorithm using 分鐘 %d 題目描述 小明要搬家了,大家都來幫忙。 小明現在住在第N樓,總共K個人要把X個大箱子搬上N樓。 最開始X個箱子都在1樓,但是經過一段混亂的搬運已經亂掉了。最後大家發現這樣混亂地搬運過程效率
hdu 4511 小明系列故事——女友的考驗(AC自動機+dp)
isp lan space alt return fin clas sqrt lose 題目鏈接:hdu 4511 小明系列故事——女友的考驗 題意: 中文不解釋。 題解: 考慮將那些限制的條件插進AC自動機裏面,然後在AC自動機上dp一下最短路就行了。 考慮dp[i][j