今マインスイーパーを作っていて地雷設置の処理で使おうと思っているのでその部分の抜粋だと思ってみてくださると幸いです。
どこで困っているかと言うと、以下のソースを実行して頂ければわかると思うのですが「9」を全体的にバラバラにシャッフルしたいのに列の状態を保持したままシャッフルしているという事です。
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <stdlib.h>
#include <time.h>
#include <vector>
using namespace std;
struct Mine{
int a;
};
vector<vector<Mine>> vec(9);
void main()
{
for(int i=0; i<9; i++){
vec[i].resize(9);
}
for(int i=0; i<10; i++){
mine.a=9;
if(i<=8) vec[0][i].a=9;
if(i>=9) vec[1][i-9].a=9;
}
puts("シャッフル前");
for(int r=0; r<9; r++){
for(int c=0; c<9; c++){
printf("%d",vec[r][c].a);
}
printf("\n");
}
printf("\n");
printf("\n");
puts("シャッフル後");
srand((unsigned)time(NULL));
for(int i=0; i<9; i++){
random_shuffle(vec.begin(),vec.end());
}
for(int r=0; r<9; r++){
for(int c=0; c<9; c++){
printf("%d",vec[r][c].a);
}
printf("\n");
}
}