\(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來表示。空格周圍的棋子可以移到空格中。要求解的問題是 給出一種初始布...