0
点赞
收藏
分享

微信扫一扫

C#学习路线指南

烟中雯城 03-18 07:30 阅读 4

广度优先遍历实现思路

  1. 构建辅助队列实现先进先出
  2. 构建访问集,给已经访问的结点进行标记
  3. 将起始结点加入队列
  4. 当队列非空时:
    1. 取出队首元素
    2. 将队首元素的所有邻居入队
    3. 访问队首元素
  5. 队列空即访问完毕

用途:求最优解

例题——catch that cow

在这里插入图片描述

代码

#include <cstdio>
#include <string>
#include <map>
#include <algorithm>
#include <vector>
#include <queue>
#include <stack>
using namespace std;
struct info{
    int pos;
    int time;
};

int main() {
    int n,k;
    scanf("%d%d",&n,&k);
    queue<info> pos_queue;
    bool is_visited[100001]={false};
    //起始点加入到队列
    info first;
    first.pos = n;
    first.time = 0;
    pos_queue.push(first);
    while(pos_queue.empty()== false){
        info current = pos_queue.front();
        pos_queue.pop();
        if (current.pos==k){
            printf("%d\n",current.time);
            break;
        }
        is_visited[current.pos]= true;

        //邻居加入队列
        info neighbor;
        if (current.pos-1 >= 0 && current.pos-1<=100000&&is_visited[current.pos-1]== false){
            neighbor.pos = current.pos-1;
            neighbor.time = current.time+1;
            pos_queue.push(neighbor);
        }
        if (current.pos+1 >= 0 && current.pos-1<=100000&&is_visited[current.pos-1]== false){
            neighbor.pos = current.pos+1;
            neighbor.time = current.time+1;
            pos_queue.push(neighbor);
        }
        if (current.pos*2 >= 0 && current.pos-1<=100000&&is_visited[current.pos-1]== false){
            neighbor.pos = current.pos*2;
            neighbor.time = current.time+1;
            pos_queue.push(neighbor);
        }
    }
    return 0;
}

例题——Find The Multiple

在这里插入图片描述

题目描述

给出一个整数 n n n ( 1 ≤ n ≤ 200 1\le n\le200 1n200)。求出任意一个它的倍数 m m m,要求 m m m 必须只由十进制的 01 组成。

输入输出格式

输入格式:

输入文件可能包含多个测试样例。每行包含一个 n n n ( 1 ≤ n ≤ 200 1\le n\le200 1n200)。包含零的行将终止输入。

输出格式:

对于输入中的 n n n, 输出对应的 m m m m m m 用十进制表示,不能超过 100 100 100 位。如果 n n n 有多个解决方案, 则其中任何一个都是可以的。

输入输出样例

输入样例:

2
6
19
0

输出样例:

10
100100100100100100
111111111111111111

代码

#include <cstdio>
#include <string>
#include <map>
#include <algorithm>
#include <vector>
#include <queue>
#include <stack>
#include <bits/stdc++.h>
using namespace std;
struct info{
    int pos;
    int time;
};

int main() {
    int n;
    while(true){
        scanf("%d",&n);
        if (n==0){
            break;
        }
        queue<long long> m;
        m.push(1);
        while(m.empty()== false){
            long long current = m.front();
            m.pop();
            if (current%n==0){
                printf("%lld\n",current);
                break;
            }
            m.push(current*10);
            m.push(current*10+1);
        }
    }
    return 0;
}
举报

相关推荐

0 条评论