交互設(shè)計包含網(wǎng)站設(shè)計長清區(qū)seo網(wǎng)絡(luò)優(yōu)化軟件
任務(wù)日期:7.29
題目一鏈接:110. 字符串接龍 (kamacoder.com)
思路:將本題尋找附近的字符串等效于尋找四周的陸地,即尋找周圍與當(dāng)前字符只有一位不同的字符串,然后加入到隊列中并標(biāo)記上,在此基礎(chǔ)上要將字符串對應(yīng)路徑長度,最后輸出長度即可
代碼:
#include <bits/stdc++.h>
//思路:將本題尋找附近的字符串等效于尋找四周的陸地,在此基礎(chǔ)上要將字符串對應(yīng)路徑長度,最后輸出長度即可
using namespace std;
int main() {int n;cin>>n;string beginstr,endstr;cin>>beginstr>>endstr;//定義一個字典集合,方便直接查找unordered_set<string> strlist;for(int i = 0;i < n;i ++) {string str;cin>>str;strlist.insert(str);}//定義一個地圖,記錄以string為結(jié)尾的路徑長度,以便查找到endstr后直接返回長度//哈希表的插入和定義要注意unordered_map<string,int> visitedstr;//初始化visitedstr:插入beginstr,并且設(shè)置路徑長度為1visitedstr.insert(pair<string,int> (beginstr,1));//進(jìn)行bfsstd::queue<string> que;que.push(beginstr);while(!que.empty()) {string cur = que.front();que.pop();int path = visitedstr[cur];//需要一個變量提前記錄一下當(dāng)前字符串的路徑長度for(int i = 0;i < cur.size();i ++){//依次換cur字符串的各個位置string neword = cur;//如果換當(dāng)前位置那么需要保證其他位置不動,所以要重新定義一個newordfor(int j = 0;j < 26;j ++) {//每個位置依次便利26個字母neword[i] = j + 'a';if(neword == endstr) {cout<<path + 1;//第26行的作用在此體現(xiàn)return 0;}//確定遞歸終止條件if(strlist.count(neword) && !visitedstr.count(neword)) {//strlist里面有當(dāng)前字符串并且當(dāng)前字符串沒有被標(biāo)記que.push(neword);//第28行作用在此體現(xiàn)visitedstr.insert(pair<string,int> (neword,path + 1));第26行的作用在此體現(xiàn):標(biāo)記當(dāng)前字符串并且當(dāng)前路徑+1}}}}cout<<0;return 0;
}
難點:1.哈希表集合和map的創(chuàng)建。集合:unordered_set<string> strlist;? ? ? ?????????????????????????????????????????????????????????map:unordered_map<string,int> visitedstr;
2.哈希表的插入操作:visitedstr.insert(pair<string,int> (beginstr,1));
3.哈希表map的含義:以string為結(jié)尾的路徑長度int.
4.用bfs求最短路徑,原因在于它是一圈一圈的遍歷,當(dāng)?shù)竭_(dá)目標(biāo)點時當(dāng)前路徑長一定是最短路徑。
,5.在每次便利一個新的string時要用path記錄當(dāng)前路徑長度,
題目二鏈接:
思路:
代碼:
難點:
解釋細(xì)節(jié)1:
題目三鏈接:
思路:
代碼:
難點:
解釋細(xì)節(jié)1: