解題思路:dfs遍歷出所有的路徑,遍歷過程中用記錄當前點的字首,每次搜到一條道路直接遞迴輸出即可
ac**:
#include #include #include #include using namespace std;
const int maxn = 21;
int pre[maxn];
bool vis[maxn];
int m, k;
vectorvec[maxn];
void print(int u)
void dfs(int u, int cnt)
for (int i = 0; i <= 2; i++)
}}int main()
int a, b, c;
for (int i = 1; i <= 20; i++)
while (scanf("%d", &m) && m)
return 0;
}
posted @
2019-05-08 09:17
youpeng 閱讀(
...)
編輯收藏
HDU 2181 哈密頓繞行世界問題
用dfs字典序搜尋即可,搜到末尾時回到原來的位置就是一條路徑,可以加乙個小剪枝,如果搜尋中經過了起始位置,可以剪枝 我把路徑打表儲存在陣列裡,防止有過多的重複輸入 include include include include includeusing namespace std const int...
HDU 2181 哈密頓繞行世界問題
由於資料量其實很小,直接dfs即可,細節見注釋 include include includeusing namespace std bool vis 21 int adj 21 3 cnt,tpath 20 start void dfs int k,int level return vis k 1...
HDU 2181哈密頓繞行世界(DFS)
題解 用乙個二維陣列 way i 3 儲存i點能到達所有 地方,然後在dfs的擴充套件地方就去遍歷 後面那個3就好了 include using namespace std int way 22 5 儲存路徑 int vis 22 標記陣列 int path 100 記錄路徑 int m,k voi...