46.图论4

### 字符串接龙

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;
}
相关推荐
点云SLAM1 分钟前
C++中constexpr 与 explicit关键字使用详解
c++·explicit关键字·隐式转换·c++编译·constexpr关键字·c++11/17/20
宠..2 分钟前
获取输入内容
开发语言·c++·qt
zl_vslam8 分钟前
SLAM中的非线性优-3D图优化之相对位姿g2o::EdgeSE3Expmap(十)
人工智能·算法·计算机视觉·3d
郝学胜-神的一滴12 分钟前
Linux系统调用中断机制深度解析
linux·运维·服务器·开发语言·c++·程序人生
deardao12 分钟前
【智能制造】智能制造系统中的时间序列分类:最先进的机器学习算法的实验评估
算法·机器学习·制造
chenyuhao202419 分钟前
Linux系统编程:Ext文件系统
linux·运维·服务器·开发语言·网络·c++·后端
2401_8414956434 分钟前
【LeetCode刷题】跳跃游戏
数据结构·python·算法·leetcode·游戏·贪心算法·数组
CoderYanger37 分钟前
贪心算法:4.摆动序列
java·算法·leetcode·贪心算法·1024程序员节
bug总结1 小时前
vue+A*算法+canvas解决自动寻路方案
前端·vue.js·算法
hd51cc1 小时前
MFC运行原理
c++·mfc