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;
}
相关推荐
丶Darling.35 分钟前
Day119 | 灵神 | 二叉树 | 二叉树的最近共公共祖先
数据结构·c++·算法·二叉树
L_cl1 小时前
【Python 算法零基础 3.递推】
算法
醍醐三叶2 小时前
C++文件操作--2 二进制文件操作
开发语言·c++
int型码农2 小时前
数据结构第七章(四)-B树和B+树
数据结构·b树·算法·b+树
li星野2 小时前
C++:C++内存管理
开发语言·c++
溟洵2 小时前
【C++ Qt】布局管理器
开发语言·c++·qt
我家大宝最可爱2 小时前
c++动态链接库
开发语言·c++
乌萨奇也要立志学C++2 小时前
【C++详解】string各种接口如何使用保姆级攻略
c++
先做个垃圾出来………2 小时前
汉明距离(Hamming Distance)
开发语言·python·算法
C++ 老炮儿的技术栈2 小时前
自定义CString类与MFC CString类接口对比
c语言·c++·windows·qt·mfc