【MOOC-浙大数据结构】第六周的编程作业——深搜广搜

2024-03-29 12:58

本文主要是介绍【MOOC-浙大数据结构】第六周的编程作业——深搜广搜,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.列出连通集

#include <stdio.h>
#include <queue>
#include <iostream>
#include <algorithm>
#include <string.h>
using namespace std;
int n,e; 
int ma[15][15];
int vis[15];
void dfs(int x)
{vis[x]=1;printf("%d ",x);int i;for(i=0;i<n;i++){if(vis[i]==0){if(ma[x][i])dfs(i);}}
}
void bfs(int x)
{vis[x]=1;int i,y;queue<int> q;q.push(x);while(!q.empty()){y=q.front();q.pop();for(i=0;i<n;i++){if(ma[y][i]&&vis[i]==0){vis[i]=1;q.push(i);printf("%d ",i);				}}}
}
int main()
{int i,x,y;memset(ma,0,sizeof ma);scanf("%d %d",&n,&e);for(i=0;i<e;i++){scanf("%d %d",&x,&y);ma[x][y]=ma[y][x]=1;}//dfs	memset(vis,0,sizeof vis);for(i=0;i<n;i++){		if(vis[i]==0){printf("{ ");	dfs(i);printf("}\n");}	}//bfsmemset(vis,0,sizeof vis);for(i=0;i<n;i++){		if(vis[i]==0){printf("{ %d ",i);	bfs(i);printf("}\n");}	}
}

2.Saving James Bond - Easy Version

因为他一开始在一个直径15的小岛上,所以起步第一跳的范围是d-7.5

#include <stdio.h>
#include <queue>
#include <iostream>
#include <algorithm>
#include <string.h>
#include <math.h>
using namespace std;
int n,d,flag; 
int vis[105];
struct Position
{double x,y;
}position[105];
bool firstjump(int i)
{return (sqrt(position[i].x*position[i].x+position[i].y*position[i].y))<=(d+7.5);
}
bool jump(int v,int i)
{return sqrt(fabs(position[v].x-position[i].x)*fabs(position[v].x-position[i].x) +fabs(position[v].y-position[i].y)*fabs(position[v].y - position[i].y))<=d;
}
bool IsSave(int v)
{return (fabs(position[v].x)>=50-d||fabs(position[v].y)>=50-d);
}
void dfs(int x)
{	vis[x]=1;if(IsSave(x)) {//安全 flag=1;return;}int i;for(i=0;i<n;i++){if(vis[i]==0){if(jump(x,i)){dfs(i);}}}return;
}
int main()
{int i,x,y;flag=0;memset(vis,0,sizeof vis);scanf("%d %d",&n,&d);for(i=0;i<n;i++)scanf("%lf %lf",&position[i].x,&position[i].y);for(i=0;i<n;i++){if(vis[i]==0&&firstjump(i)){vis[i]=1;dfs(i);}}if(flag==0)printf("No\n");elseprintf("Yes\n");
}

3.六度空间

用二维数组存图的话会内存超限,所以用Vector

#include <stdio.h>
#include <queue>
#include <vector>
#include <iostream>
#include <algorithm>
#include <string.h>
#include <math.h>
using namespace std;
int n,e;
vector<int> ma[10005];
int vis[10005];
int bfs(int x)
{vis[x]=1;int count=1,tail,i;int level=0,last=x;queue<int> q;q.push(x);while(!q.empty()){int y=q.front();q.pop();for(i=0;i<ma[y].size();i++){if(vis[ma[y][i]]==0){vis[ma[y][i]]=1;q.push(ma[y][i]);count++;tail=ma[y][i];}}if(y==last){level++;last=tail;}if(level==6)break;}return count;
}
int main()
{int i,x,y;scanf("%d %d",&n,&e);for(i=0;i<e;i++){scanf("%d %d",&x,&y);ma[x].push_back(y);ma[y].push_back(x);}for(i=1;i<=n;i++){		memset(vis,0,sizeof vis);printf("%d: %.2lf%%\n",i,1.0*bfs(i)*100/n);}
}

 

这篇关于【MOOC-浙大数据结构】第六周的编程作业——深搜广搜的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/858656

相关文章

C#反射编程之GetConstructor()方法解读

《C#反射编程之GetConstructor()方法解读》C#中Type类的GetConstructor()方法用于获取指定类型的构造函数,该方法有多个重载版本,可以根据不同的参数获取不同特性的构造函... 目录C# GetConstructor()方法有4个重载以GetConstructor(Type[]

作业提交过程之HDFSMapReduce

作业提交全过程详解 (1)作业提交 第1步:Client调用job.waitForCompletion方法,向整个集群提交MapReduce作业。 第2步:Client向RM申请一个作业id。 第3步:RM给Client返回该job资源的提交路径和作业id。 第4步:Client提交jar包、切片信息和配置文件到指定的资源提交路径。 第5步:Client提交完资源后,向RM申请运行MrAp

【数据结构】——原来排序算法搞懂这些就行,轻松拿捏

前言:快速排序的实现最重要的是找基准值,下面让我们来了解如何实现找基准值 基准值的注释:在快排的过程中,每一次我们要取一个元素作为枢纽值,以这个数字来将序列划分为两部分。 在此我们采用三数取中法,也就是取左端、中间、右端三个数,然后进行排序,将中间数作为枢纽值。 快速排序实现主框架: //快速排序 void QuickSort(int* arr, int left, int rig

Linux 网络编程 --- 应用层

一、自定义协议和序列化反序列化 代码: 序列化反序列化实现网络版本计算器 二、HTTP协议 1、谈两个简单的预备知识 https://www.baidu.com/ --- 域名 --- 域名解析 --- IP地址 http的端口号为80端口,https的端口号为443 url为统一资源定位符。CSDNhttps://mp.csdn.net/mp_blog/creation/editor

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

6.1.数据结构-c/c++堆详解下篇(堆排序,TopK问题)

上篇:6.1.数据结构-c/c++模拟实现堆上篇(向下,上调整算法,建堆,增删数据)-CSDN博客 本章重点 1.使用堆来完成堆排序 2.使用堆解决TopK问题 目录 一.堆排序 1.1 思路 1.2 代码 1.3 简单测试 二.TopK问题 2.1 思路(求最小): 2.2 C语言代码(手写堆) 2.3 C++代码(使用优先级队列 priority_queue)

【编程底层思考】垃圾收集机制,GC算法,垃圾收集器类型概述

Java的垃圾收集(Garbage Collection,GC)机制是Java语言的一大特色,它负责自动管理内存的回收,释放不再使用的对象所占用的内存。以下是对Java垃圾收集机制的详细介绍: 一、垃圾收集机制概述: 对象存活判断:垃圾收集器定期检查堆内存中的对象,判断哪些对象是“垃圾”,即不再被任何引用链直接或间接引用的对象。内存回收:将判断为垃圾的对象占用的内存进行回收,以便重新使用。

Go Playground 在线编程环境

For all examples in this and the next chapter, we will use Go Playground. Go Playground represents a web service that can run programs written in Go. It can be opened in a web browser using the follow

深入理解RxJava:响应式编程的现代方式

在当今的软件开发世界中,异步编程和事件驱动的架构变得越来越重要。RxJava,作为响应式编程(Reactive Programming)的一个流行库,为Java和Android开发者提供了一种强大的方式来处理异步任务和事件流。本文将深入探讨RxJava的核心概念、优势以及如何在实际项目中应用它。 文章目录 💯 什么是RxJava?💯 响应式编程的优势💯 RxJava的核心概念

《数据结构(C语言版)第二版》第八章-排序(8.3-交换排序、8.4-选择排序)

8.3 交换排序 8.3.1 冒泡排序 【算法特点】 (1) 稳定排序。 (2) 可用于链式存储结构。 (3) 移动记录次数较多,算法平均时间性能比直接插入排序差。当初始记录无序,n较大时, 此算法不宜采用。 #include <stdio.h>#include <stdlib.h>#define MAXSIZE 26typedef int KeyType;typedef char In