当前位置: 首页 > article >正文

笔试题笔记#3

1 一道bfs,唯一不同的是要对单链表中后继节点的编号排序 

#include<bits/stdc++.h>
using namespace std;

const int N=10000;

vector<int> headofNode[N];
int n,m;
int d;
bool st[N];
int parent[N];
vector<int> ans;

void PrintAns(int i){
    //cout<<"PrintAns"<<endl;
    for(int j=i;j!=0;j=parent[j]){
        //cout<<j<<" ";
        ans.push_back(j);
    }
    ans.push_back(0);
    for(int k=ans.size()-1;k>0;k--){
        cout<<ans[k]<<"->";
    }
    cout<<ans[0];
}

void bfs(){
    queue<int> q;
    q.push(0);
    bool isFind=false;
    while(!q.empty()){
        int t=q.front();
        q.pop();
        for(long unsigned int i=0;i<headofNode[t].size();i++){
            //cout<<"Nodeid"<<e[i]<<" "<<endl;
            int nodeid=headofNode[t][i];
            if(!st[nodeid]){
                q.push(nodeid);
            }
            if(headofNode[nodeid].size()==0&&!st[nodeid]){
                isFind=true;
                PrintAns(nodeid);
                break;
            }
        }
        if(isFind)break;
    }
    if(!isFind)cout<<"NULL";
}



int main(){

    cin>>n;
    cin>>m;

    while(m--){
        int x,y;
        cin>>x>>y;
        headofNode[x].push_back(y);
        parent[y]=x;
    }
    //cout<<parent[1]<<endl;
    cin>>d;
    for(int i=0;i<d;i++){
        int x;
        cin>>x;
        st[x]=true;
    }
    for(int i=0;i<N;i++){
        if(headofNode[i].size()>1){
            sort(headofNode[i].begin(),headofNode[i].end());
        }
    }
    bfs();
}

2 一道bfs拓扑排序,但是记录了每个点的遍历层数 

#include<bits/stdc++.h>
using namespace std;

vector<int> e[10005];  
int d[10005], dp[10005];  

int main() {
    
    int n;
    cin >> n;
    
    for (int i = 1; i <= n; i++) {
        int m;  
        cin >> m;
        for (int j = 1; j <= m; j++) {
            int x;
            cin >> x;  
            e[x].push_back(i);  
            d[i]++;  
        }
    }

    
    queue<int> q;
    for (int i = 1; i <= n; i++) {
        if (d[i] == 0) {
            q.push(i);  
            dp[i] = 1;  
        }
    }
    while (!q.empty()) {
        int u = q.front();  
        q.pop(); 
        
        for (auto v : e[u]) {
            dp[v] = max(dp[v], dp[u] + 1);  
            d[v]--;  
            if (d[v] == 0) {  
                q.push(v);  
            }
        }
    }

    
    int mx = 0;
    for (int i = 1; i <= n; i++) {
        if (dp[i] == 0) {  
            cout << -1 << endl;  
            return 0;
        }
        mx = max(mx, dp[i]);  
    }

    cout << mx << endl;
    return 0;
}


http://www.kler.cn/a/543221.html

相关文章:

  • 不到一个月,SQLite 3.49.0来了
  • redis 缓存击穿问题与解决方案
  • 机器学习 | scikit-learn中分块拟合vs一次性拟合所有数据
  • Java多线程——线程池的使用
  • 利用HTML和css技术编写学校官网页面
  • 活动预告 | 为 AI 新纪元做好准备:助力安全的业务转型
  • PyTorch Lightning Trainer介绍
  • Spring 核心技术解析【纯干货版】- XII:Spring 数据访问模块 Spring-R2dbc 模块精讲
  • 如何在WinForms应用程序中读取和写入App.config文件
  • 记忆模块概述
  • 用AI做算法题1
  • 深度学习-111-大语言模型LLM之基于langchain的结构化输出功能实现文本分类
  • 网络工程师 (33)VLAN注册协议——GVRP协议
  • linux 内核结构基础
  • MFC程序设计(十二)绘图
  • 建筑兔零基础自学python记录18|实战人脸识别项目——视频检测07
  • EPL 4.01 Preview
  • 【Elasticsearch】文本分析Text analysis概述
  • 【鸿蒙开发】第二十九章 Stage模型-应用上下文Context、进程、线程
  • Unity 代码优化记录
  • 【c++】shared_ptr是线程安全的吗?
  • fun-transformer学习笔记-Task1——Transformer、Seq2Seq、Encoder-Decoder、Attention之间的关系
  • vivo手机和Windows电脑连接同一个WiFi即可投屏!
  • Spring Cloud 完整引解:优化你的微服务架构
  • GEE批量打开asset权限(anyone can read)
  • YOLOv11融合[AAAI2025]的Mesorch 模型中的高、低频特征提取模块