算法day02
来源:互联网 发布:广州聚焦网络怎么样 编辑:程序博客网 时间:2024/05/18 00:05
算法的第二天,复习一下搜索问题。
1.DFS
void dfs(int step)//step表示站在第几个盒子前{ int i; if(step==n+1)//如果站在第n+1个盒子面前,则表示前n个盒子已经放好 { for(i=1;i<=n;i++) printf("%d ",a[i]); printf("\n"); return ;//返回前一步(最近一次调用dfs函数的地方) } //此时站在第step个盒子面前,应该放哪张牌? //按照1/2/3/4.。.n的顺序一一尝试 for(i=1;i<=n;i++) { //判断扑克牌i是否还在手上 if(book[i]==0)//表示i号扑克牌还在手上 { //开始尝试使用扑克牌i a[step]=i;//将i号扑克牌放入盒子中 book[i]=1;//表示扑克牌已经不在手上 //循环递归 dfs(step+1); book[i]=0; } } return;}
2.给定一些 points 和一个 origin,从 points 中找到 k 个离 origin 最近的点。按照距离由小到大返回。如果两个点有相同距离,则按照x值来排序;若x值也相同,就再按照y值排序。
#include <stdio.h>int a[100];struct node{ int a; int b;};double dist(int a, int b,int c, int d){ double dis; dis=(c-a)*(c-a)+(d-b)*(d-b); return dis;}void quicksort(int left,int right){ int i,j,t,temp; if(left>right) return; i=left;j=right;temp=left; while(i!=j) { while(a[j]>=temp && i<j) j--; while(a[i]<=temp && i<j) i++; if(i<j) { t=a[left];a[left]=temp;temp=t; } } //归准基准数 a[left]=a[i]; a[i]=temp; quicksort(left,i-1); quicksort(i+1,right);}int main(){ struct node origin; struct node points[6]; int k,i; for(i=1;i<=5;i++) scanf("%d%d",&points[i].a,&points[i].b); scanf("%d",&k); scanf("%d%d",&origin.a,&origin.b); for(i=1;i<=5;i++) { a[i]=dist(origin.a,origin.b,points[i].a,points[i].b); } quicksort(1,6); for(i=1;i<=k;i++) printf("%d ",a[i]); return 0;}
明天修改,要断网了。。。
阅读全文
0 0
- 算法day02
- day02--函数、数组、算法
- day02-常用算法-排序
- day02--常用算法--查找
- day02--常用算法--查找
- DAY02
- DAY02
- day02
- day02
- day02
- day02
- day02
- day02
- day02
- day02
- day02
- day02
- day02
- Django模板无法使用perms变量问题解决办法详解
- HDU
- 周末记录--2017.9.10(最长上升子序列优化算法)
- LeetCode 238. Product of Array Except Self
- spring boot起步-搭建eureka环境
- 算法day02
- 对二叉树的复习与整理
- weblogic10数据源(连接池)配置
- linux中proc文件系统
- EditorTools分析
- 9月8日笔记(servlet相关知识)
- Apache Beam中的几种常见的处理类
- HDU
- Ubuntu下MySQL、Redis以及MongoDB三个数据库的启动、重启以及停止命令