解题思路:
求最短的路径长度—-采用BFS,状态变化通过上一层结点中某个字母变化后并且出现在wordlist中(利用一个函数表示是临近状态)
int ladderLength(string beginWord, string endWord, vector<string>& wordList) {
int dis = 1;
int len = wordList.size();
//动态生成数组,用来标记是否访问过
int *visit = new int[len];
memset(visit, 0, len * sizeof(int));
queue<string> q;
//第一层到第二层----初始化queue
for (int i = 0; i < len; i++)
{
if (strCmp(beginWord, wordList[i]))
{
//到达遍历的终点
if (wordList[i] == endWord)
return 2;
//否则就压入队列,继续遍历
q.push(wordList[i]);
visit[i] = 1;
}
}
//没有到达目的地的路径
if (q.empty())
return 0;
//从第二层开始计算:dis = 2
dis++;
while (!q.empty())
{
int size = q.size();
while (size)
{
string tmp = q.front();
for (int i = 0; i < len; i++)
{
if (!visit[i])
{
if (strCmp(tmp, wordList[i]))
{
if (wordList[i] == endWord)
return dis + 1;
q.push(wordList[i]);
visit[i] = 1;
}
}
}
q.pop();
size--; //size是本层的结点个数
}
dis++;//换下一层
}
return 0;
}
bool strCmp(string s1, string s2)
{
int dif = 0;
int len = s1.size();
for (int i = 0; i < len; i++)
{
if (s1[i] != s2[i])
dif++;
}
if (dif == 1)
return true;
else
return false;
}