如下圖所示,求兩個id之間的距離,如1到18的距離為2.
方案是用極座標法,然後確定每個id的座標,再根據座標來計算距離。
**如下:
#ifndef honeycomb_h
#define honeycomb_h
extern void init_honeycomb(int max_id);
extern int calc_distance(int id1, int id2);
extern void clear(void);
#endif
#include "honeycomb.h"
#include #include /* for memset */
#define max_ring 256
/*第n環的蜂窩數為6n,n從1開始*/
struct ring_info
;static void init_ring_info(struct ring_info* ri)
static struct ring_info g_all_ring[max_ring];
static void init_all_ring(void)
}/* 共六個方向 */
enum direction
;static void move(enum direction direct, int* x, int* y)
}struct comb_info
;static struct comb_info* g_all_comb = null;
static int g_max_id = 0;
void init_honeycomb(int max_id)
g_max_id = max_id;
init_all_ring();
if (g_all_comb != null)
g_all_comb = (struct comb_info*)malloc((max_id + 1) * sizeof(struct comb_info));
if (null == g_all_comb)
g_all_comb[1].x = 0;
g_all_comb[1].y = 0;
for (i = 1; i < max_ring; i++)
move(left_down, &x, &y);
g_all_comb[cur_id].x = x;
g_all_comb[cur_id].y = y ;
cur_id++;
} for (tmp = left_up; tmp <= down; tmp++)
move(tmp, &x, &y);
g_all_comb[cur_id].x = x;
g_all_comb[cur_id].y = y ;
cur_id++;
}} }
}int calc_distance(int id1, int id2)
if (id1 <= 0
|| id2 <= 0
|| id1 > g_max_id
|| id2 > g_max_id)
d_x = g_all_comb[id1].x - g_all_comb[id2].x;
d_y = g_all_comb[id1].y - g_all_comb[id2].y;
if (d_x*d_y < 0)
else }
void clear(void)
g_max_id = 0;
}
測試用例如下:
#include "honeycomb.h"
#include static test(int id1, int id2, int len_expect)
else }
int main()
sklearn計算兩個向量之間的距離
from sklearn.feature extraction.text import countvectorizer from sklearn.metrics.pairwise import euclidean distances from sklearn.feature extraction.t...
Mysql sql 計算兩個座標之間的距離
mysql sql 計算兩個座標之間的距離 赤道半徑 6378.137km 查詢結果為km select id,6378.137 2 asin sqrt pow sin radians 當前緯度latitude radians 資料庫中儲存的目標緯度latitude 2 2 cos radians ...
計算兩點之間的距離
檔名稱 test.cpp 完成日期 2013年10月17日 版本號 v1.0 輸入描述 輸入兩個橫縱座標 問題描述 輸入兩個橫縱座標,求兩點之間的距離 程式輸出 兩點之間的距離 問題分析 通過輸入兩個橫縱座標,求兩點之間的距離 演算法設計 略 include includeusing namespa...