2023矿大数据结构第三次作业代码

 部分代码来自其他博主,部分来自本人,仅作整理~

 A.题目描述

已知一个无向图G的顶点和边,顶点从0依次编号,现在需要深度优先搜索,访问任一邻接顶点时编号小的顶点优先,请编程输出图G的深度优先搜索序列。

输入

第一行是整数m和n(1<m,n<100),分别代表顶点数和边数。后边n行,每行2个数,分别表示一个边的两个顶点。

输出

该图从0号顶点开始的深度优先搜索序列。

样例输入 复制
5 5
0 1
2 0
1 3
1 4
4 2
样例输出 复制
0 1 3 4 2

 code:

#include<bits/stdc++.h>
using namespace std;
int mp[101][101];
bool f[101]={0};
int i,n,m; 
void dfs(int x)
{
    cout<<x<<" ";
    for(int i=1;i<=m;i++)
    {
        if(mp[x][i]&&f[i]==0)
        {
            f[i]=1;
            dfs(i);
             
        }
    }
}
int main()
{
//  int m,n;
    cin>>m>>n;
    int a,b;
    for(int i=1;i<=n;i++)
    {
        cin>>a>>b;
        mp[a][b]=1;
        mp[b][a]=1;
    }
    dfs(0);
}

B.题目描述

现在给你n个结点的完全二叉树数组存储序列,请编程调整为最小堆,并输出相应最小堆的存储序列。

输入

第一行是n,第二行是n个结点的完全二叉树数组存储序列。

输出

输出相应最小堆的存储序列。

样例输入 复制
8
53 17 78 23 45 65 87 9
样例输出 复制
9 17 65 23 45 78 87 53

 code:

#include<bits/stdc++.h>
using namespace std;
void xgd(int b[],int k,int x)
{
    b[0]=b[k];
    for(int i=2*k;i<=x;i=i*2)
    {
        if(i<x&&b[i]>b[i+1])
        {
            i++;
        }
        if(b[0]<=b[i]) break;
        else{
            b[k]=b[i];
            k=i;
        }}
        b[k]=b[0];
     
}
void creat(int b[],int l)
{
    for(int i=l/2;i>0;i--)
    {
        xgd(b,i,l);
    }
}
int main()
{
    int n;
    cin>>n;
    int l=0;
    int a[n];
    for(int i=1;i<=n;i++)
    {
      cin>>a[i];
    }
    creat(a,n);
    for(int i=1;i<=n;i++)
    {
        cout<<a[i]<<" ";
    }
     
}

 

C.题目描述

给你一个无重复数的有序序列,如果采用折半查找的方式,对于给定的数,需要比较几次找到,请编程实现。

输入

第一行是N,表示序列中数的个数,序列最长1000,第二行是一个有序序列,第三行是要找的数x。

输出

如果找到x,输出折半比较的次数,否则输出NO。

样例输入 复制
11
5 13 19 21 37 56 64 75 80 88 92
19
样例输出 复制
2

code:

#include<bits/stdc++.h>
using namespace std;
int n;
int a[1001];
int f(int x)
{
    int t=n,m=0,r=1,sum=0,f=0;
    while(t>=r)
    {
        m=((t-r)/2)+r;
        if(a[m]>x)
        {
            t=m-1;
            if(t!=r)
            sum++;
        }
        else if(a[m]<x){
         
            r=m+1;
            if(t!=r)
            sum++;
        }
        else{
            sum++;
            return sum;
        }
    }
    return -1;
}
int main()
{
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        cin>>a[i];
    }
    int x,p=0;
    cin>>x;
    p=f(x);
    if(p==-1) cout<<"NO";
    else    cout<<p;
}

D.题目描述

给你N个自然数,编程输出排序后的这N个数。

输入

第一行是整数的个数N(N<=100)。第二行是用空格隔开的N个数。

输出

排序输出N个数,每个数间用一个空格间隔。

样例输入 复制
5
9 6 8 7 5
样例输出 复制
5 6 7 8 9

 

 code:

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main()
{
	vector<int>vec;
	int n, m;
	cin >> n;
	for (int i = 0; i < n; i++)
	{
		cin >> m;
		vec.push_back(m);
	}
	sort(vec.begin(), vec.end(), less<int>());
	for (int i = 0; i < vec.size(); i++)
	{
		cout << vec[i] << " ";
	}
}
E.题目描述

班级里有N个同学,老师希望你编个程序,把每个同学的学号、姓名、座位号保存下来,然后每次要查同学信息时,直接输入相应同学的学号,即可输出该同学的姓名和座位号。

输入

第一行为整数N(N<100),表示班里同学的人数。接下来N行,每行分别是每个同学的学号、姓名和座位号,最后一行是要查询的同学的学号。

输出

输出查询同学的姓名和座位号。

样例输入 复制
3
1 zhang 11
2 wang 22
3 li 33
2
样例输出 复制
wang 22

 code:
 

#include<vector>
#include<iostream>
#include<algorithm>
#include<string>
using namespace std;
struct stu
{
	int learn_num;
	string name;
	int seat_num;
};
int main()
{
	vector<stu>vec;
	stu a;
	int n, learn_num, seat_num, index;
	string name;
	cin >> n;
	for (int i = 0; i < n; i++)
	{
		cin >> learn_num;
		a.learn_num = learn_num;
		cin >> name;
		a.name = name;
		cin >> seat_num;
		a.seat_num = seat_num;
		vec.push_back(a);
	}
	cin >> index;
	for (int i = 0; i < n; i++)
	{
		if (vec[i].learn_num == index)
		{
			cout << vec[i].name << " ";
			cout << vec[i].seat_num << endl;
			break;
		}
	}
}

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
引用中的代码是一个用来构建螺旋阵的程序,通过输入一个正整数N,程序会输出符合题意的螺旋阵。这个程序使用了两层循环,第一层循环用来枚举起点,第二层循环用来枚举终点,然后将子串个数加1。最终程序会输出子串个数。 引用中的代码是一个排序程序,该程序使用了vector容器,通过输入一组整数并将其存储在vector中,然后使用sort函数对vector进行排序。最后,程序会输出排序后的整数序列。 根据你的问题描述"2023矿大数据结构",我无法理解你的问题,请提供更多的信息或者重新描述你的问题。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [2023矿大数据结构实验二C++](https://blog.csdn.net/m0_72045533/article/details/131075157)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [2023矿大数据结构第三次作业代码](https://blog.csdn.net/m0_72045533/article/details/131485539)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值