106. 岛屿的周长
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
int dir[4][2] = {0, 1, 1, 0, -1, 0, 0, -1};
int bfs(vector<vector<int>> &grid, vector<vector<int>> &visit, int &x, int &y) {
int z = 0;
queue<pair<int, int>> que;
que.push({x, y});
visit[x][y] = 1;
while(!que.empty()) {
pair<int, int> cur = que.front(); que.pop();
int curx = cur.first, cury = cur.second;
int zc = 0;
for (int i = 0; i < 4; i++) {
int nx = curx + dir[i][0];
int ny = cury + dir[i][1];
if (nx < 0 || ny < 0 || nx >= grid.size() || ny >= grid[0].size())
{
zc++;
continue;
}
if (grid[nx][ny] == 1 && !visit[nx][ny]) {
que.push({nx, ny});
visit[nx][ny] = 1;
}
if (grid[nx][ny] == 0) {
zc++;
}
}
z += zc;
}
return z;
}
int main() {
int n, m;
cin >> n >> m;
vector<vector<int>> grid(n, vector<int>(m, 0));
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
cin >> grid[i][j];
}
}
int result = 0;
vector<vector<int>> visit(n, vector<int>(m, 0));
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
if (grid[i][j] == 1 && !visit[i][j]) {
result = bfs(grid, visit, i, j);
break;
}
}
}
cout << result;
return 0;
}
110. 字符串接龙
#include <iostream>
#include <string>
#include <vector>
#include <unordered_set>
#include <unordered_map>
#include <queue>
using namespace std;
int main() {
string beginStr, endStr;
int n;
string str;
cin >> n;
cin >> beginStr >> endStr;
unordered_set<string> strList;
unordered_map<string, int> strMap;
for (int i = 0; i < n; i++) {
cin >> str;
strList.insert(str);
}
queue<string> que;
que.push(beginStr);
strMap.insert(pair<string, int>(beginStr, 1));
while(!que.empty()) {
string str = que.front(); que.pop();
for (int i = 0; i < str.size(); i++) {
string newStr = str;
for (int j = 0; j < 26; j++) {
newStr[i] = j + 'a';
if (newStr == endStr) {
cout << strMap[str] + 1;
return 0;
}
if (strList.find(newStr) != strList.end() && strMap.find(newStr) == strMap.end()) {
strMap.insert(pair<string, int>(newStr, strMap[str] + 1));
que.push(newStr);
}
}
}
}
cout << 0;
return 0;
}
105. 有向图的完全联通
#include <iostream>
#include <unordered_map>
#include <vector>
#include <queue>
using namespace std;
int main() {
int n, k;
cin >> n >> k;
unordered_map<int,vector<int>> map;
int sin, sout;
for (int i = 0; i < k; i++) {
cin >> sin >> sout;
map[sin].push_back(sout);
}
vector<int> visit(n, 0);
queue<int> que;
que.push(1);
visit[0] = 1;
while(!que.empty()) {
int curNum = que.front(); que.pop();
if (map.find(curNum) != map.end()) {
vector<int> curV = map[curNum];
for (int i = 0; i < curV.size(); i++) {
if (!visit[curV[i] - 1]) {
visit[curV[i] - 1] = 1;
que.push(curV[i]);
}
}
}
}
for (int i = 0; i < visit.size(); i++) {
if (visit[i] == 0) {
cout << -1;
return 0;
}
}
cout << 1;
return 0;
}