題意:輸出乙個長度為n的由小寫字母並且長度大於4的單詞不能相同的字串
解題分析:首先能確定字串的長度最大 26^4 + 3 (初始態的三個字元)。建立圖的模型,將三個字元看成乙個結點,每個結點有26條出邊,得到26個新結點,這樣就構成了有26^3 個結點,邊有26^4 條邊。現在只要將每條邊遍歷一遍就可以了,這就是尤拉路徑,在這裡是乙個迴路,即尤拉迴路。注意,我們是從aaa出發的,為了遍歷所有的狀態,要把a字元的優先順序設定為最低。下面提供手寫棧和遞迴擴棧的**,建議用手寫棧。
**如下:
#include#include#include#include#include#includeconst int dig = 26;
const int n = dig*dig*dig;
#define inf 0x3f3f3f
#define pi acos(-1.0)
#define eps 10e-6
using namespace std;
char ans[n*dig+100];
bool vis[n][30];
int cnt[n];
int tot ;
int get_next(int cur,int i)
void init()
int temp = get_next(cur,iv);
if(cnt[temp] == 26) break;
vis[cur][iv] = 1;
cnt[temp]++;
ans[tot++] = (char)(iv+'a');
cur = temp;
}}int main()
for(int i = 0; i < n; i++)
printf("%c",ans[i]);
printf("\n");
}return 0;
}
#pragma comment (linker,"/stack:102400000,102400000")
#include#include#include#include#include#includeconst int dig = 26;
const int n = dig*dig*dig;
#define inf 0x3f3f3f
#define pi acos(-1.0)
#define eps 10e-6
using namespace std;
char ans[n*dig+100];
bool vis[n][30];
int tot ;
int get_next(int cur,int i)
void dfs(int cur)
}if(!vis[cur][0])
}int main()
printf("%s\n", (ans + 456979 - n));
}return 0;
}
HDU 尤拉迴路
problem description 尤拉迴路是指不令筆離開紙面,可畫過圖中每條邊僅一次,且可以回到起點的一條迴路。現給定乙個圖,問是否存在尤拉迴路?input 測試輸入包含若干測試用例。每個測試用例的第1行給出兩個正整數,分別是節點數n 1 n 1000 和邊數m 隨後的m行對應m條邊,每行給出...
HDU 1878 尤拉迴路(判斷尤拉迴路)
題目大意 尤拉迴路是指不令筆離開紙面,可畫過圖中每條邊僅一次,且可以回到起點的一條迴路。現給定乙個圖,問是否存在尤拉迴路?解題思路 判斷無向圖是否存在尤拉迴路,判斷每個點的度數是否為偶數 並查集確認連通性。1 include2 include3 include4 define clr arr,val...
尤拉迴路(HDU 1878) 尤拉迴路模板題
題目鏈結 尤拉迴路是指不令筆離開紙面,可畫過圖中每條邊僅一次,且可以回到起點的一條迴路。現給定乙個圖,問是否存在尤拉迴路?測試輸入包含若干測試用例。每個測試用例的第1行給出兩個正整數,分別是節點數n 1 n 1000 和邊數m 隨後的m行對應m條邊,每行給出一對正整數,分別是該條邊直接連通的兩個節點...