夜空繁星(BFS,雜湊)

2022-06-08 17:15:08 字數 1296 閱讀 8703

\(0 \leq 星群數量 \leq 500\),

\(0 \leq 不相似星群數量 \leq 26\),

\(1 \leq 星群中星星的數量 \leq 160\)

這個的關鍵主要是找到判定兩個星群相似的方法。

下面有乙個定理:若乙個星群中所有點兩兩距離的和,與另乙個星群相等,那麼這兩個星群相似。

這裡給出乙個直觀的證明:將星群視為乙個多邊形,這些距離將多邊形劃分為乙個個三角形,兩個多邊形劃分的所有三角形全等,那個兩個多邊形相似。

下面證明兩個多邊形對應三角形全等:因為距離和相等,並且一格的長度是1,因此對應三角形的對應邊都是相等的。

#include #include #include #include #include #include using namespace std;

typedef pairpii;

const int n = 110, m = n * n;

const double eps = 1e-6;

int n, m;

char g[n][n];

pii point[m];

int cnt;

bool st[n][n];

double hash_val[m];

int num;

int dx[8] = ;

int dy[8] = ;

double get_dist(pii a, pii b)

double get_hash()

}return res;

}char get_id(double hash)

}hash_val[num] = hash;

num ++;

return num - 1 + 'a';

}void bfs(int ax, int ay)

); st[ax][ay] = true;

point[cnt] = ;

cnt ++;

while(que.size()) );

st[x][y] = true;

point[cnt] = ;

cnt ++;}}

}int main()}}

}for(int i = 1; i <= n; i ++) printf("%s\n", g[i] + 1);

return 0;

}

八數碼 bfs,雜湊

很經典的搜尋,bfs部分沒什麼好講的,不是很難,值得注意的是如何判定走的路徑是否重複,本題採用的是雜湊來判重 include include includetypedef int state 9 const int maxn 1000003 int head maxn next maxn head陣...

BFS 雜湊 Magic Squares 魔板

題目描述 在成功地發明了魔方之後,拉比克先生發明了它的二維版本,稱作魔板。這是一張有8個大小相同的格仔的魔板 1 2 3 4 8 7 6 5 我們知道魔板的每乙個方格都有一種顏色。這8種顏色用前8個正整數來表示。可以用顏色的序列來表示一種魔板狀態,規定從魔板的左上角開始,沿順時針方向依次取出整數,構...

codevs1225 八數碼難題 bfs 雜湊

題目描述 description yours和zero在研究a 啟發式演算法.拿到一道經典的a 問題,但是他們不會做,請你幫他們.問題描述 在3 3的棋盤上,擺有八個棋子,每個棋子上標有1至8的某一數字。棋盤中留有乙個空格,空格用0來表示。空格周圍的棋子可以移到空格中。要求解的問題是 給出一種初始布...