2016-02-09 170 views
0

我只想知道我编码是正确的,或如果去正确的方式。任何指针和帮助深表谢意。随机坐标和禁用移动的下一个随机集

我需要编写一个随机可以通过一组坐标的代码,然后当这个坐标已经从第一组随机数中选择时,它将被禁用或程序将不得不再次随机选择一个值。

我已经编码了一些东西,我只是不知道如何检查它是否正确,因为我在这里处理随机数。

#include <cstdlib> 
#include <iostream> 

using namespace std; 

int x; 
int y; 
void random(), check(), rad(); 
const int numRows = 10; 
const int numCols = 10; 
bool moveflag [numRows][numCols]; 
string move [numRows][numCols] = 
{ 
     {"A1", "B1", "C1", "D1", "E1", "F1", "G1", "H1", "I1", "J1"}, //row1 
     {"A2", "B2", "C2", "D2", "E2", "F2", "G2", "H2", "I2", "J2"}, //row2 
     {"A3", "B3", "C3", "D3", "E3", "F3", "G3", "H3", "I3", "J3"}, //row3 
     {"A4", "B4", "C4", "D4", "E4", "F4", "G4", "H4", "I4", "J4"}, //row4 
     {"A5", "B5", "C5", "D5", "E5", "F5", "G5", "H5", "I5", "J5"}, //row5 
     {"A6", "B6", "C6", "D6", "E6", "F6", "G6", "H6", "I6", "J6"}, //row6 
     {"A7", "B7", "C7", "D7", "E7", "F7", "G7", "H7", "I7", "J7"}, //row7 
     {"A8", "B8", "C8", "D8", "E8", "F8", "G8", "H8", "I8", "J8"}, //row8 
     {"A9", "B9", "C9", "D9", "E9", "F9", "G9", "H9", "I9", "J9"}, //row9 
     {"A10", "B10", "C10", "D10", "E10", "F10", "G10", "H10", "I10", "J10"} 
}; 

int main(int argc, char *argv[]) 
{ 
for (int row = 0; row < numRows; ++row) 
{ 
    for (int col = 0; col < numCols; ++col) 
     cout << move[row][col] << "\t"; 
     } 

random(); 



system("PAUSE"); 
return EXIT_SUCCESS; 
} 

void rad(){ 
cout << endl << move[y][x] <<endl; 
moveflag[y][x] = true; 
} 

void random(){ 
x = rand() % 10; 
y = rand() % 10; 
check(); 
if(!moveflag[y][x]) 
{rad();} 
} 

void check(){ 
if (moveflag[y][x]) 
{random();} 
} 
+1

如果你想要检查你的代码,你应该发布到[代码评论](http://codereview.stackexchange.com/) – NathanOliver

+0

1:你可以使用C++ 11或更高版本吗? 2:复制输入数据是否有问题? – Neijwiert

+0

@NathanOliver哦,这里有一个独立的地方。对不起。我只是这个网站的新手。 –

回答

0

这种方法的问题是随着算法的进展,随机数的拒绝率会稳定增加。

更好的方法是shuffle输入坐标,随后,按顺序读取混洗的集合。

使用std::random_shuffle来做到这一点。

+0

绝对如此。你甚至可以将你最喜欢的生成器传递给std :: random_shuffle。 – Bathsheba

+0

阅读你的评论后,我研究了有关random_shuffle,我无法弄清楚如何将它用于我的二维数组。并且一次输出一个新的混洗坐标,因为我看到的所有示例都同时输出所有混洗的数字。 –