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;
}
相关推荐
南境十里·墨染春水11 分钟前
C++ 笔记 thread
java·开发语言·c++·笔记·学习
南境十里·墨染春水13 分钟前
C++ 笔记 高级线程同步原语与线程池实现
java·开发语言·c++·笔记·学习
瞎折腾啥啊24 分钟前
CMake FetchContent与ExternalProject
c++·cmake·cmakelists
三品吉他手会点灯1 小时前
STM32 VSCode 开发-C/C++的环境配置中,找不到C/C++: Edit Configurations选项
c语言·c++·vscode·stm32·单片机·嵌入式硬件·编辑器
逻辑驱动的ken1 小时前
Java高频面试考点场景题09
java·开发语言·数据库·算法·oracle·哈希算法·散列表
帅小伙―苏2 小时前
力扣42接雨水
前端·算法·leetcode
AI科技星2 小时前
精细结构常数α的几何本源:从第一性原理的求导证明、量纲分析与全域验证
算法·机器学习·数学建模·数据挖掘·量子计算
6Hzlia2 小时前
【Hot 100 刷题计划】 LeetCode 287. 寻找重复数 | C++ 数组判环 (快慢指针终极解法)
c++·算法·leetcode
MegaDataFlowers2 小时前
26.删除有序数组中的重复项
算法
Robot_Nav3 小时前
DPMPC-Planner:复杂静态环境与动态障碍物下的无人机实时轨迹规划框架
c++·无人机·mpc