第13講 ベクタを利用して4次魔方陣を作ろう!
第8話 for文を用いないデータ交換関数gその2

 
0  1  2  3  4
1  5  6  7  8
2  9 10 11 12
3 13 14 15 16

      

 
0  1 15 14  4
1 12  6  7  9
2  8 10 11  5
3 13  3  2 16

(一番外側の青とピンクの0,1,2,3は座標を表しています。)
を実現するプログラム例
g以前までは、プログラムは同一
void g(vector<vector<int>>::iterator m){
   int w;
   w=m[
3][2];
   m[
3][2]=m[0][1];
   m[0][1]=w;
   w=m[3][1];
   m[3][1]=m[0][2];
   m[0][2]=w;

   w=m[2][
3];
   m[2][3]=m[1][
0];
   m[1][0]=w;
   w=m[1][3];
   m[1][3]=m[
2][0];
   m[2][0]=w;
}

色の対応に気をつけて下さい。
例えば、m[3][2]は

 
0  1  2  3  4
1  5  6  7  8
2  9 10 11 12
3 13 14 15 16

座標()で15のある緑のセルです。
ですから、1行目
   w=m[3][2];
によってwには15が入ります。
15が保存されたわけです。
そして2行目
   m[3][2]=m[0][1];
によって、

 
0  1  2  3  4
1  5  6  7  8
2  9 10 11 12
3 13 14  2 16

となっています。
さらに、3行目
   m[
0][1]=w;
によって保存されていた15が座標()に入り、

 
0  1 15  3  4
1  5  6  7  8
2  9 10 11 12
3 13 14  2 16

最初の交換が成立するわけです。

次の4行目の
   w=m[3][
1];
右辺の対象セルは

 
0  1 15  3  4
1  5  6  7  8
2  9 10 11 12
3 13 14  2 16

緑のセルですから、
   w=m[3][1];
によって、14がwに保存されます。
5行目
   m[
3][1]=m[0][2];
により

 
0  1 15  3  4
1  5  6  7  8
2  9 10 11 12
3 13  3  2 16

となります。
6行目
   m[0][2]=w;
により保存されていた14が座標(
)に入り

 
0  1 15 14  4
1  5  6  7  8
2  9 10 11 12
3 13  3  2 16

2個目の交換が成功します。

7行目の
   w=m[2][
3];
右辺の対象セルは

 
0  1 15 14  4
1  5  6  7  8
2  9 10 11 12
3 13  3  2 16

緑のセルですから、
   w=m[2][3];
によって、12がwに保存されます。
8行目
   m[
2][3]=m[1][0];
により

 
0  1 15  3  4
1  5  6  7  8
2  9 10 11  5
3 13  3  2 16

となります。
9行目
   m[1][0]=w;
により保存されていた12が座標(
)に入り

 
0  1 15 14  4
1 12  6  7  8
2  9 10 11  5
3 13  3  2 16

3個目の交換が成功します。


10行目の
   w=m[1][
3];
右辺の対象セルは

 
0  1 15 14  4
1 12  6  7  8
2  9 10 11  5
3 13  3  2 16

緑のセルですから、
   w=m[1][3];
によって、8がwに保存されます。
11行目
   m[
1][3]=m[2][0];
により

 
0  1 15  3  4
1 12  6  7  9
2  9 10 11  5
3 13  3  2 16

となります。
12行目
   m[2][0]=w;
により保存されていた8が座標(
)に入り

 
0  1 15 14  4
1 12  6  7  9
2  8 10 11  5
3 13  3  2 16

4個目の交換が成功して4次魔方陣の完成というわけです。



さて、次はfor文版で実現させます。


第7話へ 第9話へ



a

eclipse c++ 入門講義第1部へ

魔方陣 数独で学ぶ V
BA 入門
数独のシンプルな解き方・簡単な解法の研究
VB講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座
初心者のための世界で一番わかりやすいVBA入門講義(基礎から応用まで)
初心者のための VC++による C言語 C++ 入門 基礎から応用まで第1部
eclipse java 入門
java 入門 サイト 基礎から応用まで
VC++ C言語 C++ 入門 初心者 基礎から応用まで
本サイトトップへ