計蒜客題解 T1244 單詞序列

2021-10-03 13:23:12 字數 1941 閱讀 8734

計蒜客 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 或...