int n = wordList.size(); if (n > 10000) { return n; } int length = beginWord.length(); vector<vector<bool>> matrix(n); int count = 0;
int start = 0; int end = 0; for (int i = 0; i < n; i++) { matrix[i].insert(matrix[i].begin(), n, 0); if (wordList[i] == endWord) { end = i; } } if (end == 0) { return0; } for (int i = 0; i < n; i++) { for (int j = i + 1; j < n; j++) { count = 0; for (int l = 0; l < length; l++) { if (wordList[i][l] != wordList[j][l]) { count++; if (count > 1) { break; } } } if (count == 1) { matrix[i][j] = true; matrix[j][i] = true; } } }
vector<int> distance(n); vector<int> prenode(n); //vector<bool> visited(n); set<int> s; for (int i = 0; i < n; i++) { s.insert(i); } int cur = 0;
int mindistance; int next; s.erase(s.find(cur)); int i; while (true) { mindistance = 0; next = 0; for(set<int>::iterator it = s.begin();it!=s.end();it++) { i = (*it);
int n = wordList.size(); int length = beginWord.length(); int count = 0;
vector<int> distance(n); set<int> s; for (int i = 0; i < n; i++) { s.insert(i); } int cur = 0;
int mindistance; int next; s.erase(s.find(cur)); int i; while (true) { mindistance = 0; next = 0; for(set<int>::iterator it = s.begin();it!=s.end();it++) { i = (*it);
count = 0; for (int l = 0; l < length; l++) { if (wordList[cur][l] != wordList[i][l]) { count++; if (count > 1) { break; } } } if (count == 1) { if (distance[i] == 0 || distance[i] > distance[cur] + 1) { distance[i] = distance[cur] + 1; } }
{ if (distance[i] != 0 && (mindistance == 0 || mindistance > distance[i])) { mindistance = distance[i]; next = i; } } } cur = next; if (cur == 0) { break; } s.erase(s.find(cur)); if (wordList[cur] == endWord) { break; } }
int ans = 0; if (cur != 0) { ans = distance[cur] + 1; } return ans; } };
set<int> s; int end = 0; for (int i = 0; i < n; i++) { s.insert(i); if (wordList[i] == endWord)end = i; } if (end == 0) { return0; } int cur = 0;
openDistance.push({0,0});
int i;
int ans = 0; while (!openDistance.empty()) { if (s.find(openDistance.top().index) == s.end()) { openDistance.pop(); continue; } open o = openDistance.top(); openDistance.pop(); s.erase(s.find(o.index));
cur = o.index; if (cur == end) { ans = o.distance + 1; break; }
for(set<int>::iterator it = s.begin();it!=s.end();it++) { i = (*it);
count = 0; for (int l = 0; l < length; l++) { if (wordList[cur][l] != wordList[i][l]) { count++; if (count > 1) { break; } } } if (count == 1) { if (distance[i] == 0) { count2 = 0; for (int l = 0; l < length; l++) { if (wordList[i][l] != wordList[end][l]) { count2++; } }