代码如下,注释很清楚,稍微学过数据结构的应该可以看懂

#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相关推荐

  1. UVA216 UVALive5155 Getting in Line【全排列+回溯】

    Computer networking requires that the computers in the network be linked.     This problem considers ...

  2. [JS][dfs]题解 | #迷宫问题#

    题解 | #迷宫问题# 题目链接 迷宫问题 题目描述 定义一个二维数组 N*M ,如 5 × 5 数组下所示: int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 1, 1 ...

  3. [C] [编程题]连通块(DFS解决)

    时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 256M,其他语言512M 来源:牛客网 金山办公2020校招服务端开发工程师笔试题(一) 题目描述 给一个01矩阵,1代表是陆地,0代表 ...

  4. 【BZOJ2434】[NOI2011]阿狸的打字机 AC自动机+DFS序+树状数组

    [BZOJ2434][NOI2011]阿狸的打字机 Description 阿狸喜欢收藏各种稀奇古怪的东西,最近他淘到一台老式的打字机.打字机上只有28个按键,分别印有26个小写英文字母和'B'.'P ...

  5. usaco snail trails(dfs)

    dfs啊,我还写了好长时间,一天不如一天. /* ID:jinbo wu TASK: snail LANG:C++ */ #include<bits/stdc++.h> using nam ...

  6. usaco shuttle puzzle(dfs剪枝)

    这题一看我也以为找规律,然后无法下手之后又想到bfs最后看题解是用dfs大神dfs用的出神入化. 不过这题好像可以找规律. /* ID:jinbo wu TASK: shuttle LANG:C++ ...

  7. usaco street race(dfs)

    一开始我觉得很麻烦但第一题好做由于数据较小直接每个点删后dfs就可以了,第二问我不知道如何判断有没有公共的道路,最后看别人的也挺简单的就是看分别从两条公路的起点开始dfs如果他们能到达同一点就代表有公 ...

  8. Forest Program dfs+tanjar仙人掌

    题目链接 CCPC2019 F题. 题意:给一颗仙人掌树,让你求每一个小环的边的个数,用快速幂即可求解. 思路:第一反应是tanjar乱搞,把每个环上的点取出来,类似于缩点的方法.但是忽然感觉dfs能 ...

  9. 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 ...

最新文章

  1. 为何人工智能首推Python 初学者怎么学Python
  2. iOS开发拓展篇—静态库
  3. pytorch GPU版本安装 win10
  4. 算法训练营 重编码_编码训练营后十四天如何找到工作
  5. 大数据学习笔记34:Hive - 数据库与表操作
  6. Python循环嵌套应用案例一则:判断丑数
  7. Linux禁止ping以及开启ping的方法
  8. 7-28 搜索树判断(25 分)
  9. 入门级详细USB移植教程——致正在为USB烦恼的朋友
  10. Nature子刊:大脑在局部区域的结构-功能耦合的遗传度与个体差异
  11. Oracle 11g RAC OEM配置
  12. C++求一个数的最大奇数约数
  13. FCW前车碰撞预警的两个重要指标——THW、TTC
  14. MySQL备份报错mysqldump: Got error: 1045: Access denied for user ‘root‘@‘localhost‘ (using password: YES)
  15. 【初识C语言】从头到尾了解C语言这一篇足矣
  16. 图像处理的一些相关知识(Related knowledge for IQA)
  17. MIPI入门——D-PHY介绍(一)
  18. 金蝶 EAS 编码规则 新增显示且不允许断号
  19. 读取excel,int 数字时间转时间
  20. python中使用cv2遍历图片像素点以及改变像素点的像素值

热门文章

  1. jfinal调用mysql存储过程 封装_jfinal如何调用存储过程?
  2. 兼容最新PS2021 Raya Pro 5 for Mac——值得推荐的PS终极数字混合扩展面板
  3. 计算机系统操作工五级证件,计算机系统操作工国家职业标准.doc
  4. 小学奥数 7657 连乘积末尾0的个数 python
  5. 线性筛法--有测试代码
  6. PhpStorm failed to transfer files by FTP 报错解决方法
  7. linux 内核 核心代码,8分钟掌握Linux内核分析的核心科技
  8. selenium java封装_selenium2.0的初步封装(java版本)
  9. Vue笔记-Ant Design Vue构建前端连接后端WebSocket
  10. Java笔记-JDBC心跳检测及断开重连线程实例