資源簡介
華中科技大學(xué)2018算法實(shí)驗(yàn) 。

代碼片段和文件信息
#include?
#include?
#include??
#include??
#include
using?namespace?std;
const?double?infinite?=?0x1ffffff;
int?minPointNum?=?0;?//統(tǒng)計(jì)有多少個最短點(diǎn)
int??PointNumber;
class?Point?{
public:
Point()?{ }
Point(double?x?double?y)
{
Point::x?=?x;
Point::y?=?y;
}
int?x;
int?y;
}?;??//直接建立點(diǎn)集
int?*strip_area;
Point?*po;
struct?minPoints?{
double?cal;
int?left;
int?right;
};?//最小距離點(diǎn)的點(diǎn)集
minPoints?*minP;
/*比較x坐標(biāo)的大小*/
/*若a小于b就返回1*/
int?cmp_x(Point?a?Point?b)
{
return?a.x?}
/*比較y坐標(biāo)的大小*/
int?cmp_y(int?a?int?b)
{
return?po[a].y?}
/*計(jì)算兩點(diǎn)間的最短距離*/
double?cal_point_distance(Point?a?Point?b)
{
return?sqrt((a.x?-?b.x)*(a.x?-?b.x)?+?(a.y?-?b.y)*(a.y?-?b.y));
}
/*分而治之地計(jì)算最短距離*/
/*n為點(diǎn)的個數(shù),list為點(diǎn)集*/
double?cal_min_distance(const?int?left?const?int?right)
{
double?min?=?infinite;
//如果只有一個點(diǎn),那么最短距離就是無窮大
if?(left?==?right)?return?infinite;
//如果有兩個點(diǎn),那么最短距離就是兩者間的距離
if?(right?==?left?+?1)
{
int?point_distance?=?cal_point_distance(po[left]?po[right]);
if?(minP[minPointNum].cal?==?point_distance)?{
if?(!((minP[minPointNum].left?==?left)?&&?(minP[minPointNum].right?==?right)))
{
//兩個點(diǎn)的左右不能完全相等
//如果存在相同的最小距離,那么最短距離點(diǎn)的個數(shù)就會加
minPointNum++;
minP[minPointNum].cal?=?point_distance;
minP[minPointNum].left?=?left;
minP[minPointNum].right?=?right;
}
}
else?if?(point_distance? {
//如果距離要大于算出來的距離,那么讓相同最短距離點(diǎn)個數(shù)回到0(代表1)
minPointNum?=?0;
minP[minPointNum].cal?=?point_distance;
minP[minPointNum].left?=?left;
minP[minPointNum].right?=?right;
}
return?point_distance;
}
int?middle?=?(left?+?right)?/?2;
double?left_dis?=?cal_min_distance(left?middle);
double?right_dis?=?cal_min_distance(middle?+?1?right);
min?=?left_dis?
/*下面確定[x-minx+min]的區(qū)域*/
int?strip_num?=?0;
for?(int?i?=?left;?i?<=?right;?i++)
{
if?(fabs(po[middle].x?-?po[i].x)?<=?min)
strip_area[strip_num++]?=?i;
}
//按縱坐標(biāo)升序排列這些點(diǎn)
sort(strip_area?strip_area?+?strip_num?cmp_y);
for?(int?i?=?0;?i? {
int?k?=?((i?+?7)?>?strip_num)???strip_num?:?(i?+?7);?//最多只用算7次
double?strip_min;
for?(int?j?=?i?+?1;?(j? {
strip_min?=?cal_point_distance(po[strip_area[i]]?po[strip_area[j]]);
if?(minP[minPointNum].cal?==?strip_min)?{
if?(strip_area[i]? {
if?(!((minP[minPointNum].left?==?strip_area[i])?&&?(minP[minPointNum].right?==?strip_area[j])))
{
minPointNum++;
minP[minPointNum].cal?=?strip_min;
minP[minPointNum].left?=?strip_area[i];
minP[minPointNum].right?=?strip_area[j];
}
}
else
{
if?(!((minP[minPointNum].left?==?strip_area[j])?&&?(minP[minPointNum].right?==?strip_area[i])))
{
minPointNum++;
minP[minPoin
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2018-11-14?18:06??算法實(shí)驗(yàn)\
?????目錄???????????0??2018-11-14?18:04??算法實(shí)驗(yàn)\lab1\
?????文件????????5159??2018-11-14?17:58??算法實(shí)驗(yàn)\lab1\Point_to_Point.cpp
?????文件??????134656??2018-11-14?17:58??算法實(shí)驗(yàn)\lab1\Point_to_Point.exe
?????文件?????????119??2018-11-14?16:17??算法實(shí)驗(yàn)\lab1\in.dat
?????文件??????????78??2018-11-14?18:04??算法實(shí)驗(yàn)\lab1\out.dat
?????目錄???????????0??2018-11-14?18:06??算法實(shí)驗(yàn)\lab2\
?????文件??????166400??2018-11-14?16:29??算法實(shí)驗(yàn)\lab2\BigNum.exe
?????文件????????6058??2018-11-14?16:29??算法實(shí)驗(yàn)\lab2\bignum.cpp
?????文件?????????206??2018-11-14?18:06??算法實(shí)驗(yàn)\lab2\in.dat
?????文件?????????112??2018-11-14?18:06??算法實(shí)驗(yàn)\lab2\out.dat
?????目錄???????????0??2018-11-14?18:07??算法實(shí)驗(yàn)\lab3\
?????文件?????????818??2018-11-13?20:00??算法實(shí)驗(yàn)\lab3\BSTree.cpp
?????文件???????48640??2018-11-13?19:59??算法實(shí)驗(yàn)\lab3\shuanfa_lab3.exe
?????目錄???????????0??2018-11-14?13:50??算法實(shí)驗(yàn)\lab4\
?????文件????????1991??2018-11-14?13:49??算法實(shí)驗(yàn)\lab4\FLOYD.cpp
?????文件???????48111??2018-11-14?13:50??算法實(shí)驗(yàn)\lab4\a.exe
?????文件?????????167??2018-11-14?13:49??算法實(shí)驗(yàn)\lab4\in.dat
?????文件?????????764??2018-11-14?18:07??算法實(shí)驗(yàn)\lab4\out.dat
評論
共有 條評論