計蒜客 oj,
我的 oj,
蒜頭君給出兩個單詞(開始單詞和結束單詞)以及乙個詞典。找出從開始單詞轉換到結束單詞,所需要的最短轉換序列。轉換的規則如下:
1、每次只能改變乙個字母
2、轉換過程**現的單詞(除開始單詞和結束單詞)必須存在於詞典中
例如:開始單詞為:hit,結束單詞為:cog,詞典為:[hot,dot,dog,lot,log,mot],那麼一種可能的最短變換是: hit -> hot -> dot -> dog -> cog,所以返回的結果是序列的長度 5。
注意:1、如果不能找到這種變換,則輸出 0;
2、詞典中所有單詞長度一樣;
3、所有的單詞都由小寫字母構成;
4、開始單詞和結束單詞可以不在詞典中。
共兩行,第一行為開始單詞和結束單詞(兩個單詞不同),以空格分開。第二行為若干的單詞(各不相同),以空格分隔開來,表示詞典。單詞長度不超過 5,單詞個數不超過 30。
輸出轉換序列的長度。
hit cog
hot dot dog lot log
5
從開始單詞轉換到結束單詞,每次只能改變乙個字母,轉換過程**現的單詞(除開始單詞和結束單詞)必須存在於詞典中。求輸出轉換序列的長度。
樣例輸入 hit,詞典為 [hot,dot,dog,lot,log,mot]。按照規定每次只能改變乙個字母,轉換的單詞必須在詞典表中。因此我們可以畫出下圖的變換過程:
從上圖可以看出,hit 變化到 log 有兩種路徑:
1、hit -> hot -> dot -> dog -> cog,本方法序列長度為 5。
2、hit -> hot -> lot -> log -> cog,本方法序列長度為 5。
所以最終輸出的結果為 5。
//比較字串a和b是否差乙個字元
bool judge(const string &a, const string &b) }}
return 1==ans?true:false;
}
通過設定標誌為來實現。
個人還是趨向定義乙個結構體,將所有資料報括在裡面。
typedef struct _node node;
從上面的樣例資料分析,本題是一道 bfs 模板題。大致可以分以下幾個步驟:
1、讀入資料。
2、將開始資料加入到佇列中。
3、使用 bfs 遍歷。
#include using namespace std;
typedef struct _node node;
const int maxn = 30+4;
node a[maxn];
//判斷兩個字串是否差乙個字元
bool judge(const string &a, const string &b)
} }return (1==ans)?true:false;
}int main() ;//開始單詞
node ed = {};//結束單詞
cin >> st.data >> ed.data;
int cnt = 0;
while (cin>>a[cnt++].data);
queueq;//佇列
st.vis = true;
st.dis = 1;
q.push(st);
while (false == q.empty())
//檢查詞典表那個單詞可以插入
for (int i=0; i
} }printf("0\n");
return 0;
}
計蒜客 單詞拼接
輸出一行,如果所有的單詞都可以連線在一起並且可以形成乙個環,那麼輸出euler loop 如果所有單詞都可以連線在一起,但是不會形成環,輸出euler path 如果所有單詞不能連在一起,那麼輸出impossible。樣例輸入3 euler ruby jisuanke 樣例輸出euler path ...
計蒜客題解 T1213 拯救行動
計蒜客 oj,公主被惡人抓走,被關押在牢房的某個地方。牢房用 n m n,m 200 的矩陣來表示。矩陣中的每項可以代表道路 牆壁 和守衛 x 英勇的騎士 r 決定孤身一人去拯救公主 a 我們假設拯救成功的表示是 騎士到達了公主所在的位置 由於在通往公主所在位置的道路中可能遇到守衛,騎士一旦遇到守衛...
計蒜客 矩陣翻轉 題解
time 1000ms memory 65536k desc 曉萌最近在做乙個翻轉的應用,你可能也知道,其實是由乙個個的點組成的。於是,曉萌想先做乙個可以翻轉矩陣的程式,來解決他問題的核心部分。input fomat 輸入第一行包括由空格分開的整數 m,n,t 0 n,m 200 t 的值為 0 或...