本文主要是介绍hdunbsp;1007nbsp;平面最近点对nbsp;nbsp;随机增量…,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1007
题目大意:求平面内最近点对的距离
考查点:求平面最近点对的较快算法,(二分或随机增量)
思路:当我们确定了一个两点之间的距离r以后,就可以在平面上画出一个正方形表格来
正方形的边长为r,这样可能与点x更新r的点只能在x所在点的8个方向及自己所在格子。
这样我们就可以将问题的规模缩小,每次只看某个点周围的几个就行,记录每个格子里有哪些点就会用到hash记录, 这里我是用了(I × MAXN +
算法时间复杂度O(n * k/n * n) = O(kn) 常数较大的线性时间算法。
提交情况:runtime error
经验: 考虑问题要全面,hash要写的尽量使宽裕的感觉
收获: 体会了增量f法的魔力
AC code
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
#include <math.h>
#define MAXN 101000
#define DUBF 9999999.9
#define INF 130589
struct NODE{
};
struct NODE1{
};
intdirection[9][2] = {0, 0, -1, -1, -1, 0, -1, 1, 0, 1, 1, 1, 1, 0, 1, -1, 0, -1};
NODE1 point[MAXN];
NODE edges[MAXN];
int ad;
intmap[INF];
int HASH(int x, int y){
}
double len(int i, int j){
}
void Into_Hash(int i, double r){
}
voidRenew_Hash(int n, double r){
}
doubleGet_len_around(int p, double r){
}
double Get_R(int n){
}
void swap(int i, int j){
}
int main(){
}
这篇关于hdunbsp;1007nbsp;平面最近点对nbsp;nbsp;随机增量…的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!