0
点赞
收藏
分享

微信扫一扫

2022-01-22每日刷题打卡

辰鑫chenxin 2022-01-22 阅读 40

2022-01-22每日刷题打卡

一本通

1213:八皇后问题

【题目描述】

在国际象棋棋盘上放置八个皇后,要求每两个皇后之间不能直接吃掉对方。

【输入】

(无)

【输出】

按给定顺序和格式输出所有八皇后问题的解(见样例)。

【输入样例】

(无)
【输出样例】
No. 1 
1 0 0 0 0 0 0 0 
0 0 0 0 0 0 1 0
0 0 0 0 1 0 0 0
0 0 0 0 0 0 0 1
0 1 0 0 0 0 0 0
0 0 0 1 0 0 0 0
0 0 0 0 0 1 0 0
0 0 1 0 0 0 0 0
No. 2 
1 0 0 0 0 0 0 0 
0 0 0 0 0 0 1 0 
0 0 0 1 0 0 0 0 
0 0 0 0 0 1 0 0 
0 0 0 0 0 0 0 1 
0 1 0 0 0 0 0 0 
0 0 0 0 1 0 0 0  
0 0 1 0 0 0 0 0 
...以下省略

。。。做不到按顺序输出,我run了。

#include<iostream>
using namespace std;
const int N = 100;
int n = 8, idx = 1;;
int queen[N][N];
bool col[N], dg[N], udg[N];

void dfs(int u)
{
    if (u == n)
    {
        cout << "No. " << idx++ << endl;
        for (int i = 0; i < n; i++)
        {
            for (int j = 0; j < n; j++)
            {
                cout << queen[i][j] << " ";
            }
            cout << endl;
        }
        return;
    }
    for (int i = 0; i < n; i++)
    {
        if (!col[i] && !dg[u + i] && !udg[n - u + i])
        {
            col[i] = dg[u + i] = udg[n - u + i] = true;
            queen[u][i] = 1;
            dfs(u + 1);
            col[i] = dg[u + i] = udg[n - u + i] = false;
            queen[u][i] = 0;
        }
    }
}

int main()
{

    dfs(0);
    return 0;
}

1329:【例8.2】细胞

【题目描述】

一矩形阵列由数字00到99组成,数字11到99代表细胞,细胞的定义为沿细胞数字上下左右还是细胞数字则为同一细胞,求给定矩形阵列的细胞个数。如:

阵列

4 10

0234500067

1034560500

2045600671

0000000089有44个细胞。

【输入】

第一行为矩阵的行nn和列mm;下面为一个n×mn×m的矩阵。

【输出】

细胞个数。

【输入样例】

4 10

0234500067

1034560500

2045600671

0000000089

【输出样例】

4

广度遍历搜索,待把迷宫记录下来后,遍历,当遍历到的点不为0时,以这个点作为起点,进行广度搜索,把起点连着的所有点都设置为0,一切结束后,细胞数++。当遍历完所有起点后,输出细胞数。

#include<iostream>
using namespace std;

typedef pair<int, int>PII;
const int N = 410;
int g[N][N];
int h[N][N];
PII que[N * N];
int n, m;

int dx[4] = { 1,0,-1,0 }, dy[4] = { 0,1,0,-1 };

void bfs(int x, int y)
{
    que[0] = { x,y };
    int hh = 0, tt = 0;
    while (hh <= tt)
    {
        auto t = que[hh++];
        for (int i = 0; i < 4; i++)
        {
            int a = t.first + dx[i], b = t.second + dy[i];
            if (a >= 0 && a < n && b >= 0 && b < m && g[a][b] != 0)
            {
                g[a][b] = 0;
                que[++tt] = { a,b };
            }
        }
    }
}

int main()
{
    memset(g, 0, sizeof(g));
    cin >> n >> m;
    int ans = 0;
    for (int i = 0; i < n; i++)
        for (int j = 0; j < m; j++)
            scanf("%1d", &g[i][j]);
    for(int i=0;i<n;i++)
        for(int j=0;j<m;j++)
            if (g[i][j] != 0)
            {
                bfs(i, j);
                ans++;
            }
    cout << ans << endl;
    
    return 0;
}

蓝桥杯

算法提高 三个整数的排序

问题描述

输入三个数,比较其大小,并从大到小输出。

输入格式

一行三个整数。

输出格式

一行三个整数,从大到小排序。

样例输入

33 88 77

样例输出

88 77 33

#include<iostream>
using namespace std;
#include<vector>
#include<algorithm>

int main()
{
    vector<int>v(3);
    for (int i = 0; i < 3; i++)
        cin >> v[i];
    sort(v.begin(), v.end());
    for (int i = 2; i >= 0; i--)
        cout << v[i] << " ";
    
    return 0;
}
举报

相关推荐

2022-01-09每日刷题打卡

2022-01-05每日刷题打卡

2022-01-12每日刷题打卡

2022-01-04每日刷题打卡

2022-01-20每日刷题打卡

2022-01-17每日刷题打卡

2022-01-19每日刷题打卡

2022-02-27每日刷题打卡

2022-04-17每日刷题打卡

0 条评论