# 惱人的廣告 **首先,我們來弄清楚題目想要做什麼。** **怒氣值請直接輸出不會,因為我氣量很大,而且就算遊戲下載下來玩的也不一樣。** **如果你有~~Youtube Premium~~沒看過這廣告,那是你太盤🍽️** **好啦反正就是遇到比自己小的數字就可以吃掉它讓自己變大** **"從小走到大那條為正解"、"走法是隨機且不重複的"、"每個房間只能走一次"、"從1開始"、"房間內的數字都相異"在給定這些條件並要求"最多要走幾次"?** * **"從小走到大那條為正解"** + **“走法是隨機且不重複的”** + **"“房間內的數字都相異""** = **有唯一解** * **"最多要走幾次”** = **最後一次才走到正確的路(唯一),也就是會走(總路徑數)次** * **“每個房間只能走一次”** = **不會有"環"的情況發生** * **“從1開始”** = **求第一個點DFS下去的路徑數** **** :::spoiler **code** ```cpp= #include<bits/stdc++.h> #define endl '\n' #define IO cin.tie(0) -> sync_with_stdio(0) #define emp emplace_back using namespace std; typedef long long ll; vector <vector<int> > Tu(100000+1); bool vis[100000+1] = {false}; ll times = 0; int DFS(int cur){ vis[cur] = true; bool AllVisited = true; for (int i = 0; i < Tu[cur].size(); i++){ if( !vis[ Tu[cur][i] ] ){ AllVisited = false; DFS( Tu[cur][i] ); } } if(AllVisited == true){ times++; } vis[cur] = false; } int main(){ int k , n , a , b; ll M; while(cin >> k >> n >> M){ Tu.assign(k + 1, vector<int>() ); memset(vis , 0 , sizeof(vis)); times = 0; for(int i = 1 ; i <= n ; i++){ cin >> a >> b; Tu[a].emp(b); Tu[b].emp(a); } DFS(1); cout << times << " 不會" << endl; } } ``` :::
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up