UVA216 ——dfs
代码如下,注释很清楚,稍微学过数据结构的应该可以看懂
#include<iostream>
#include<cmath>
#include<cstring>
#include<stdio.h>
using namespace std;
#define MAXNUM 9int x[MAXNUM],y[MAXNUM];//记录坐标
double dis[MAXNUM][MAXNUM];//记录两点间距离,作为图的邻接矩阵
int ans_order[MAXNUM];//存储dfs遍历节点的顺序
int tem_order[MAXNUM];//临时存储dfs遍历节点的顺序
double min_dis = 10000000;//最短距离
int visit[MAXNUM];//记录节点是否被访问
int n ;double distance(int x1,int y1,int x2,int y2){//两点间距离return sqrt(pow( x1-x2 ,2)+pow(y1-y2,2));
}void dfs(int cur){//对图进行第cur深度的深搜if ( cur == n ){//如果深度超过图的节点个数,则对当前深搜所得到的连通图进行判断double sum = 0 ;for (int i = 0 ; i < n-1 ; i ++){//求当前所得连通图的代价,即题目题目中的stepsum+=dis[tem_order[i]][tem_order[i+1]];}if (sum < min_dis){min_dis = sum ;memcpy(ans_order,tem_order,sizeof(tem_order));}}else{//对图进行第cur深度的深搜for( int i = 0 ; i < n ; i++){//遍历节点,找到下一个没有被访问的节点继续深度搜索if(!visit[i]){visit[i] = 1 ;tem_order[cur] = i ;//当前深搜顺序的第cur个节点是idfs(cur+1);//对图进行第cur+1深度的深搜visit[i] = 0;//相当于该节点退栈}}}}int main (){int time = 0;while (cin>>n && n!=0){time ++ ;for (int i = 0 ; i < n ; i++){//输入并计算距离scanf("%d %d",&x[i],&y[i]);visit[i] = 0 ;for (int j = 0 ; j < i ; j++){dis[i][j] = dis[j][i] = distance(x[j],y[j],x[i],y[i]);}}min_dis = 1000000;dfs(0);printf("**********************************************************\n");printf("Network #%d\n",time);for (int i = 0 ; i < n-1; i++){printf("Cable requirement to connect (%d,%d) to (%d,%d) is %.2lf feet.\n",x[ans_order[i]],y[ans_order[i]],x[ans_order[i+1]],y[ans_order[i+1]],dis[ans_order[i]][ans_order[i+1]]+16);}printf("Number of feet of cable required is %.2lf.\n",min_dis+16*(n-1));}return 0;
}
UVA216 ——dfs相关推荐
- UVA216 UVALive5155 Getting in Line【全排列+回溯】
Computer networking requires that the computers in the network be linked. This problem considers ...
- [JS][dfs]题解 | #迷宫问题#
题解 | #迷宫问题# 题目链接 迷宫问题 题目描述 定义一个二维数组 N*M ,如 5 × 5 数组下所示: int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 1, 1 ...
- [C] [编程题]连通块(DFS解决)
时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 256M,其他语言512M 来源:牛客网 金山办公2020校招服务端开发工程师笔试题(一) 题目描述 给一个01矩阵,1代表是陆地,0代表 ...
- 【BZOJ2434】[NOI2011]阿狸的打字机 AC自动机+DFS序+树状数组
[BZOJ2434][NOI2011]阿狸的打字机 Description 阿狸喜欢收藏各种稀奇古怪的东西,最近他淘到一台老式的打字机.打字机上只有28个按键,分别印有26个小写英文字母和'B'.'P ...
- usaco snail trails(dfs)
dfs啊,我还写了好长时间,一天不如一天. /* ID:jinbo wu TASK: snail LANG:C++ */ #include<bits/stdc++.h> using nam ...
- usaco shuttle puzzle(dfs剪枝)
这题一看我也以为找规律,然后无法下手之后又想到bfs最后看题解是用dfs大神dfs用的出神入化. 不过这题好像可以找规律. /* ID:jinbo wu TASK: shuttle LANG:C++ ...
- usaco street race(dfs)
一开始我觉得很麻烦但第一题好做由于数据较小直接每个点删后dfs就可以了,第二问我不知道如何判断有没有公共的道路,最后看别人的也挺简单的就是看分别从两条公路的起点开始dfs如果他们能到达同一点就代表有公 ...
- Forest Program dfs+tanjar仙人掌
题目链接 CCPC2019 F题. 题意:给一颗仙人掌树,让你求每一个小环的边的个数,用快速幂即可求解. 思路:第一反应是tanjar乱搞,把每个环上的点取出来,类似于缩点的方法.但是忽然感觉dfs能 ...
- HDU - 5877 Weak Pair 2016 ACM/ICPC 大连网络赛 J题 dfs+树状数组+离散化
题目链接 You are given a rootedrooted tree of NN nodes, labeled from 1 to NN. To the iith node a non-neg ...
最新文章
- 为何人工智能首推Python 初学者怎么学Python
- iOS开发拓展篇—静态库
- pytorch GPU版本安装 win10
- 算法训练营 重编码_编码训练营后十四天如何找到工作
- 大数据学习笔记34:Hive - 数据库与表操作
- Python循环嵌套应用案例一则:判断丑数
- Linux禁止ping以及开启ping的方法
- 7-28 搜索树判断(25 分)
- 入门级详细USB移植教程——致正在为USB烦恼的朋友
- Nature子刊:大脑在局部区域的结构-功能耦合的遗传度与个体差异
- Oracle 11g RAC OEM配置
- C++求一个数的最大奇数约数
- FCW前车碰撞预警的两个重要指标——THW、TTC
- MySQL备份报错mysqldump: Got error: 1045: Access denied for user ‘root‘@‘localhost‘ (using password: YES)
- 【初识C语言】从头到尾了解C语言这一篇足矣
- 图像处理的一些相关知识(Related knowledge for IQA)
- MIPI入门——D-PHY介绍(一)
- 金蝶 EAS 编码规则 新增显示且不允许断号
- 读取excel,int 数字时间转时间
- python中使用cv2遍历图片像素点以及改变像素点的像素值
热门文章
- jfinal调用mysql存储过程 封装_jfinal如何调用存储过程?
- 兼容最新PS2021 Raya Pro 5 for Mac——值得推荐的PS终极数字混合扩展面板
- 计算机系统操作工五级证件,计算机系统操作工国家职业标准.doc
- 小学奥数 7657 连乘积末尾0的个数 python
- 线性筛法--有测试代码
- PhpStorm failed to transfer files by FTP 报错解决方法
- linux 内核 核心代码,8分钟掌握Linux内核分析的核心科技
- selenium java封装_selenium2.0的初步封装(java版本)
- Vue笔记-Ant Design Vue构建前端连接后端WebSocket
- Java笔记-JDBC心跳检测及断开重连线程实例