### 字符串接龙
cpp
# include<iostream>
# include<cstring>
# include<unordered_set>
# include<unordered_map>
# include<queue>
using namespace std;
int N;
string beginStr,endStr;
string strList[510];
queue<string> qu;
unordered_set<string> myset;
unordered_map<string,int> mymap;
int main(){
cin>>N;
cin>>beginStr>>endStr;
for(int i=0;i<N;i++){
cin>>strList[i];
myset.insert(strList[i]);
}
int res=1;
qu.push(beginStr);
while( !qu.empty() ){
int sz=qu.size();
res++;
for(int m=0;m<sz;m++){
string cur=qu.front();
qu.pop();
mymap[cur]++;
for(int i=0;i<cur.size();i++){
string tmp=cur;
for(int j=0;j<26;j++){
tmp[i]='a'+j;
if(tmp==endStr){
cout<<res;
return 0;
}
if(myset.find(tmp)!=myset.end()&&!mymap[tmp]){
qu.push(tmp);
}
}
}
}
}
cout<<0;
}
有向图的完全可达性
cpp
# include<iostream>
using namespace std;
int g[110][110]={0};
int N,K;
int visited[110]={0};
int res=0;
void dfs(int n){
visited[n]=1;
res++;
for(int i=1;i<=N;i++){
if(g[n][i]&&!visited[i]){
dfs(i);
}
}
}
int main(){
cin>>N>>K;
for(int i=0;i<K;i++){
int s,t;
scanf("%d %d",&s,&t);
g[s][t]=1;
}
dfs(1);
if(res<N)cout<<-1;
else cout<<1;
return 0;
}
岛屿的周长
cpp
# include<iostream>
using namespace std;
int g[60][60];
int N,M;
int dir[4][2]={0,1,0,-1,-1,0,1,0};
int main(){
cin>>N>>M;
for(int i=0;i<N;i++){
for(int j=0;j<M;j++){
scanf("%d",&g[i][j]);
}
}
int res=0;
for(int i=0;i<N;i++){
for(int j=0;j<M;j++){
if(g[i][j]){
for(int k=0;k<4;k++){
int next_i=i+dir[k][0];
int next_j=j+dir[k][1];
if(next_i<0||next_j<0||next_i>=N||next_j>=M){
res++;
continue;
}
if(!g[next_i][next_j]){
//cout<<"next_i="<<next_i<<" next_j="<<next_j<<endl;
res++;
}
}
}
}
}
cout<<res;
return 0;
}