前提・実現したいこと
二次元配列、乱数を使って、縦横の項目を入れ替える
以下のような初期化して、その後はどうすればいいでしょうか?
該当のソースコード
C言語
1#define M 40 2 3void map(char map[M][M]){ 4 int i; 5 for (i=0;i<M;M++){ 6 map[0][i] = i; 7 map[i][0] = i; 8} 9}
「縦横の項目を入れ替える」とは例えばどういう感じにしたいのでしょうか.
コメントありがとうございます。
以下のようなイメージで、横と縦の数字をランダムにしてたいです。重複しないこと。
0 1 2 3 4 5 6 7 8...
------------------------
1
2
3
4
5
6
7
8
.
.
.
その縦横の[0]列の数値がランダムに, 例えば列方向なら 7,2,4,6,3,1,0,8,5... 的になるということですか?
ご返事ありがとうございました。
はい、そうですね。
[0][0] は 0 のままで良いのでしょうか.
shuffleを使いたいです。
はい、0のまま大丈夫です
shuffle とはどのライブラリの関数のことでしょうか.
c言語初心者です。例えば単に
void shuffle(char map[M][M]){
この中に、質問に提示された初期化のものを乱数化したいです。
}
自分は、一次元の配列のshuffle関数ができたが、二次元なら、わかりません。一次元のshuffle関数はこのようなものです。
void shuffle(char map[M]){
int cnt,tmp,rnd;
srand(unsigned)time(NULL));
for (cnt = 0; cnt < M; cnt ++){
tmp = tbl[rnd];
tbl[rnd] = tbl[cnt];
tbl[cnt] = tmp;
}
}
なるほど.
まず, 「shuffleを使いたい」と言われると何処かに既存の shuffle関数があるものと考えてしまいます. ご自分で作成された関数でしたら, その旨仰って頂かないと分かりません.
また, コードは出来るだけ動かしているもの/コンパイルエラーの無いものをコピペしてください.
例えばその shuffle 関数は見ただけでも, cha→char, srandの'('不足,tmp→temp 等の間違いが多いです. 今は「このようなもの」ということでイメージは分かりましたが, 単に転記間違いで回答があらぬ方向に向かってしまう場合がありますので.
そして, 1次元の配列で出来たのでしたら, それが2次元の列方向となりますので, それを行方向にも同じようにすれば出来ます.
ご指摘いただき、ありがとうございます。やってみます。
R: a行とb行の入れ替え
C: a列とb列の入れ替え
を用意し、 a, b をデタラメに選んで何度かRまたはCをやればいいんですかね?