皮皮网
皮皮网

【iapp源码共享大厅】【c贪吃蛇源码】【聊天室源码程序】dfs源码解析

来源:sTD公式源码 发表时间:2024-11-25 10:34:21

1.一个C语言题目?
2.八皇后问题 DFS 结束条件是码解什么
3.c++队列的问题,学习图时在成员函数使用了pop(),码解但是码解无效,请问是码解iapp源码共享大厅什么原因?

dfs源码解析

一个C语言题目?

       递归,传入参数为未答题同学数k和当前总得分sum

       每次一位同学答题后k--,码解然后有四种选择使总分发生变化,码解即沿四个分支继续递归

       递归终止条件为k==0,码解此时再判断sum是码解否为0即可

       C语言代码和运行结果如下:

       输出为,数学验证一下,码解总分为0只可能为:4个同学都选甲题,码解2对2错;

       4个同学都选乙题,码解c贪吃蛇源码2对2错;2个同学选甲题,码解1对1错,码解另2个同学选乙题,码解1对1错

       因此答案为:A(4,码解2)+A(4,2)+A(4,2)=,结果正确,聊天室源码程序望采纳~

       附源码:

#include <stdio.h>

int ans = 0;

void dfs(int k, int sum) {

    if (k == 0) { // 所有人都答题完毕

        if (sum == 0)

            ans++;

        return;

    }

    dfs(k - 1, sum + ); // 选择甲题且答对

    dfs(k - 1, sum - ); // 选择甲题且答错

    dfs(k - 1, sum + ); // 选择乙题且答对

    dfs(k - 1, sum - ); // 选择乙题且答错

}

int main() {

    dfs(4, 0); // 一共4人,初始得分为0

    printf("%d\n", ans);

    return 0;

}

八皇后问题 DFS 结束条件是什么

       放皇后q[i]=j,同时让第j列和过(i,j)位置的两条对角线变为不安全,即让C[j]=false,L[i-j+8]=false,R[i+j]=false。

       查一下i是贪吃蛇c源码否为8,如果为8,则表明已经放完8个皇后,方案数Num加1,输出该方案下8个皇后的位置;否则,未到8个,旅游网站源码php则皇后数i加1再试着放,递归调用 Try(i+1)。

       为了寻找不同方案,当一个方案输出后,要回溯,将先前放的皇后从棋盘上拿起来,看看能否再换一处位置。这时要将被拿起来的皇后的所在位置的第j列和两条对角线恢复为安全的

       void Try( int i )

        {

        for ( int j = 1; j <= n; j++ )

        {

        if ( 第 i 行第 j 列没有攻击 )

        {

        在第 i 行第 j 列安放皇后;

        if ( i == n ) 输出一个布局;

        else Try ( i+1 );

        撤消第 i 行第 j 列的皇后;

        }

        }

       }

c++队列的问题,学习图时在成员函数使用了pop(),但是无效,请问是什么原因?

       问题在于你的queue<int> adj(int v) 函数返回的是一个queue的拷贝,而不是queue本身。

       改成

        queue <int>& adj(int v) //获取和顶点v相邻的所有顶点

        {

        return adjacent[v];

        }

       全部源码如下:

       #include<iostream>

       #include<queue>

       using namespace std;

       class Graph {

       public:

        Graph(int v) //创建一个包含v个顶点但不包含边的图

        {

        this -> adjacent = new queue < int > [v];

        this -> V = v;

        this -> E = 0;

        }

        int Vnum() //获取顶点的数量

        {

        return this -> V;

        }

        int Enum() //获取边的数量

        {

        return this -> E;

        }

        void addEdge(int v, int w)

        //向图中增加一条边 v-w

        {

        this -> adjacent[v].push(w);

        this -> adjacent[w].push(v);

        this -> E++;

        }

        queue <int>& adj(int v) //获取和顶点v相邻的所有顶点

        {

        return adjacent[v];

        }

       private:

        int V; //顶点数量

        int E; //顶点边数量

        queue < int > * adjacent;

       };

       class DepthFirstSearch {

       public:

        DepthFirstSearch(Graph G, int s) { //构件深度优先搜索对象,利用深度优先搜索找出G图中s顶点的所有相同顶点

        this -> marked = new bool[G.Vnum()];

        for (int i = 0; i < G.Vnum();

        ++i) {

        marked[i] = false;

        }

        this -> N = 0;

        dfs(G, s);

        }

        void dfs(Graph G, int v) //利用深度优先搜索找出G中v顶点的所有相通顶点

        {

        marked[v] = true;

        int w = G.adj(v).front();

        while (!G.adj(v).empty()) //找到v队列里的内容

        {

        if (!marked[w]) {

        dfs(G, w);

        }

        cout << "队列大小:" << G.adj(v).size() << endl;

        G.adj(v).pop();

        cout << "队列删除后的大小:" << G.adj(v).size() << endl;

        if (G.adj(v).empty() == 1) {

        break;

        }

        w = G.adj(v).front();

        }

        this -> N++;

        //N加1 的位置放在当前节点变true的时候

        }

        bool mark(int w) //判断w与s是否相通

        {

        return marked[w];

        }

        int count() {

        return N;

        }

        private: bool * marked; //索引代表顶点,值表示当前顶点是否已经被搜索

        int N; //记录有多少个顶点与s顶点相同

       };

       int main() {

        Graph g();

        g.addEdge(0, 6);

        g.addEdge(0, 2);

        g.addEdge(0, 1);

        g.addEdge(0, 6);

        g.addEdge(5, 3);

        g.addEdge(5, 4);

        g.addEdge(3, 4);

        g.addEdge(4, 6);

        g.addEdge(7, 8);

        g.addEdge(9, );

        g.addEdge(9, );

        g.addEdge(, );

        g.addEdge(9, );

        DepthFirstSearch * DFS = new DepthFirstSearch(g, 0);

        int num = DFS -> count();

        cout << num << endl;

        return 0;

       }

相关栏目:综合