修改密码

全面备考2025 CSP-J 初赛 & 复赛直播课

更新中

陈远龙老师主讲 & 答疑

课程题单 - T1005

未购买 · 可先试学24节课

课程目录展开/折叠

第1课 CSP-J大纲知识专题&初赛真题精讲

视频时长:55:17
播放快捷键

播放/暂停:空格(或鼠标单击)      全屏:F(或鼠标双击)      退出全屏:Esc

快进10 / 30 / 60秒:方向键→ / Ctrl + 方向键→ / Shift + 方向键→

快退10 / 30 / 60秒:方向键← / Ctrl + 方向键← / Shift + 方向键←

本节课讲解配套PPT&板书:

本节课讲解到的源代码

源代码下载:第1课 CSP-J大纲知识专题&初赛真题精讲-源代码下载

1. 图-邻接矩阵-1
#include <bits/stdc++.h>
using namespace std;

char data[] = {'A', 'B', 'C', 'D'};
const int N = 4;

int g[N][N];
/*
int g[N][N] = {
    {0, 1, 0, 1},
    {1, 0, 1, 1},
    {0, 1, 0, 1},
    {1, 1, 1, 0}
};
*/

// 无向图 双向边 
void addEdge(int u, int v) // u、v都是顶点编号 
{
    g[u][v] = g[v][u] = 1;
}

bool vis[N];
void dfs(int u)
{
    cout << data[u] << ' ';
    vis[u] = true;

    for (int j = 0; j < N; j ++)
    {
        if (g[u][j] == 1 && !vis[j])
            dfs(j);
    }
}

bool inq[N];
void bfs(int u)
{
    queue<int> q;
    q.push(u);
    inq[u] = true;

    while (!q.empty())
    {
        int u1 = q.front();
        q.pop();
        cout << data[u1] << ' ';
        for (int j = 0; j < N; j ++)
        {
            if (g[u1][j] == 1 && !inq[j])
            {
                q.push(j);
                inq[j] = true;
            }
        }

    }
}

int main()
{
    // 构建好图 
    addEdge(0, 1);
    // addEdge(0, 2);
    addEdge(0, 3);

    // addEdge(1, 0); 不需要重复设置
    addEdge(1, 2);
    addEdge(1, 3);

    addEdge(2, 3); 

    for (int i = 0; i < N; i ++)
    {
        for (int j = 0; j < N; j ++)
            cout << g[i][j] << ' ';
        cout << endl; 
    }

    dfs(0); // A B C D

    cout << endl;
    memset(vis, 0x00, sizeof(vis));
    dfs(1); //B A D C

    cout << endl;
    bfs(0); // A B D C

    cout << endl;
    memset(inq, 0x00, sizeof(inq));
    bfs(1); // B A C D

    return 0;
} 
2. 图-邻接表-1
#include <bits/stdc++.h>
using namespace std;

char data[] = {'A', 'B', 'C', 'D'};

vector<int> g[4]; // 邻接表实现 

void dfs(int u)
{

}

void bfs(int u)
{

}

int main()
{

    // 构建图 
    g[0].push_back(1);
    g[0].push_back(3);

    g[1].push_back(0);
    g[1].push_back(2);
    g[1].push_back(3);

    g[2].push_back(1);
    g[2].push_back(3);

    g[3].push_back(0);
    g[3].push_back(1);
    g[3].push_back(2);

    // 打印邻接表 
    for (int i = 0; i < 4; i ++)
    {
        // g[i]
        cout << i << "->";
        for (int j = 0; j < g[i].size(); j ++)
            cout << g[i][j] << ' ';
        cout << endl;
    }

    return 0;
} 
本节课无课后练习

本节课答疑

建议大家有问题先通过AI答疑(比如:DeepSeek 等),AI时代需要学会使用AI辅助学习

陈远龙老师视频讲解:如何使用DeepSeek进行答疑?

通过AI未能获得满意解答的,可以联系陈远龙老师答疑

目录