有兩種方法。但是,你必須確保位置是獨一無二的,所有的計算機得到安置,所有插槽得到填補[一旦]
假設A是靜態/全局(例如它的全零)。
注:RAND()是stdlib.h中,但它不帶任何參數。所以:
#define xrand(_lim) (rand() % _lim)
而且,由於M和N是#define語句,我會做#define P (M * N)
簡單和緩慢:
void
place(void)
{
int compid;
int y;
int x;
for (compid = 1; compid <= P; ++compid) {
while (1) {
y = xrand(M);
x = xrand(N);
if (A[y][x] == 0) {
A[y][x] = compid;
break;
}
}
}
}
的另一種方法:
int used[P + 1];
void
place(void)
{
int compid;
int y;
int x;
for (y = 0; y < M; ++y) {
for (x = 0; x < N; ++x) {
while (1) {
compid = xrand(P);
// we want 1..P not 0..P-1
compid += 1;
if (compid > P)
continue
if (used[compid] == 0) {
A[y][x] = compid;
used[compid] = 1;
break;
}
}
}
}
}
使用'rand'和'srand'功能。 – haccks
將電腦隨機放置在網格中並隨機放置在一排中沒有區別。 –
使用(僞)隨機數生成器並維護一組選定的項目。在每個步驟中,您生成一個隨機數* r *,選擇* r *:th未選擇的項目並將其標記爲已選。 –