題目鏈接
sosoonrivergoesthemgotmoonbeginbig0 Sample OutputYes.HintHint Harry 可以念這個咒語:"big-got-them". SourceGardon-DYGG Contest 1 RecommendJGShining | We have carefully selected several similar problems for you: 1175 1180 1258 1242 2553解題思路: DFS
用一個結構體數(shù)組a,a[i].x, a[i].y 分別用來存每個單詞的開頭和結尾, 循環(huán)查找開頭為'b'的單詞a[i].x == 'b',
然后DFS(s)。當a[s].x == 'm'時,找到目標查詢結束,否則就繼續(xù)查找以當前點的結尾為開頭的i, 即a[s].y == a[i].x,繼續(xù)DFS(i);
代碼:
#include <cmath>#include <string>#include <cstdio>#include <sstream>#include <cstring>#include <iostream>#include <algorithm>#define LOCALusing namespace std;int n = 0;int visit[1000];int flag = 0;struct ln{ char x, y;}a[1000];void dfs(int s){ if(flag == 1) return; //提前退出以節(jié)省時間,也可不必這也寫。 if(a[s].x == 'm') //目標情況 { flag = 1; return; } else { for (int i = 0; i < n; i++) if(a[s].y == a[i].x) //當前點的末尾是下個點的開始 if(!visit[i]) { visit[i] = 1; //標記走過 dfs(i); visit[i] = 0; //標記還原 } }}int main(){ string s; while (cin>>s) { //因為題目要求循環(huán)輸入寫的有點亂。 if(s == "0") { memset(visit, 0, sizeof(visit)); flag = 0; for(int i = 0; i < n; i++) //循環(huán)查詢開頭為b的然后深搜 { if(a[i].x == 'b') dfs(i); if(flag == 1) break; } if(flag) cout << "Yes." << endl; else cout << "No." << endl; n = 0; //記得將n置零 } //這里為將輸入的s的開頭結尾存入a中 int k = s.length(); a[n].x = s[0]; a[n].y = s[k-1]; n++; } return 0;}
新聞熱點
疑難解答