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;
}
相关推荐
有梦想的骇客3 小时前
书籍将正方形矩阵顺时针转动90°(8)0605
线性代数·算法·矩阵
有梦想的骇客3 小时前
书籍“之“字形打印矩阵(8)0609
java·算法·矩阵
Chenyu_3104 小时前
12.找到字符串中所有字母异位词
c语言·数据结构·算法·哈希算法
苏三福4 小时前
yolo11-seg ultralytics 部署版本
算法·yolo11
achene_ql5 小时前
select、poll、epoll 与 Reactor 模式
linux·服务器·网络·c++
SY师弟7 小时前
51单片机——计分器
c语言·c++·单片机·嵌入式硬件·51单片机·嵌入式
wuqingshun3141597 小时前
蓝桥杯 冶炼金属
算法·职场和发展·蓝桥杯
豪斯有话说8 小时前
C++_哈希表
数据结构·c++·散列表
jndingxin8 小时前
OpenCV CUDA模块光流计算-----实现Farneback光流算法的类cv::cuda::FarnebackOpticalFlow
人工智能·opencv·算法