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;
}
相关推荐
老师我太想进步了20261 小时前
【数据结构-4】算法美学之顺序表
数据结构·算法
风影同志783241 小时前
编码器是激活函数吗?—— 一个看起来很像、其实不是的类比
算法
UIU1141 小时前
P1481 魔族密码
c++·算法·动态规划
加宝的起点雷达4 小时前
40 条候选里 38 条来自同一个源,主卡整屏重样
人工智能·算法·创业
秋天的怀念_David5 小时前
算法一千零一夜 · 第二十六夜 协议的母语
java·spring boot·算法
闻缺陷则喜何志丹7 小时前
【C++特性】四种类型转
c++·算法·类型转换
喵本喵叁肆7 小时前
用 Boosting 把弱隐私算法炼成强隐私算法(英文原题:Boosting and Differential Privacy (FOCS 2010))
算法·集成学习·boosting
青梅味猪大肠8 小时前
【操作系统-60】临近适应算法
java·linux·开发语言·嵌入式硬件·算法·操作系统