マトリックス斜め方向トラバーサルに関する質問

  ダイナミックプログラミングで使用される行列を横切る斜め方向を横断するマトリックス斜め方向を横断するように現在、非常に一般的であるため、以下のように要約されます。

  主要なアイデア:1-nに対してループ内の二重ループを使用して、n個のデジタルの代表斜め表さ外側ループステップサイズのために、中心線を横切る、すなわち、現在のステップサイズの中心線に基づいて適用されます保存します:

  

  

 1 int[][] vec = new int[][]{{1,2,3,4,5},{1,2,3,4,5},{1,2,3,4,5},{1,2,3,4,5},{1,2,3,4,5}};
 2 
 3         //左下-右上方向 从中间开始 向右下方遍历
 4         //i 代表的是步长 j代表是中间的斜轴
 5         for(int i = 0;i < vec.length;i++){
 6             for(int j = 0;j < vec.length;j++){
 7                 if(j+i >= vec.length) break;
 8                 System.out.print(vec[j][j+i] + " ");
 9             }
10             System.out.println();
11         }
12 
13         //左下-右上方向 从右上方开始 向中间遍历
14         //i 代表的是步长 j代表是中间的斜轴
15         for(int i = vec.length - 1;i >=0 ;i--){
16             for(int j = 0;j < vec.length ;j++){
17                 if(j+i >= vec.length) break;
18                 System.out.print(vec[j][j+i] + " ");
19             }
20             System.out.println();
21         }
22 
23         //左下-右上方向 从中间开始 向左下方遍历
24         //i 代表的是步长 j代表是中间的斜轴
25         for(int i = 0;i < vec.length ;i++){
26             for(int j = 0;j < vec.length ;j++){
27                 if(j-i < 0) continue;
28                 System.out.print(vec[j][j-i] + " ");
29             }
30             System.out.println();
31         }
32 
33         //左下-右上方向 从左下方开始 向中间白能力
34         //i 代表的是步长 j代表是中间的斜轴
35         for(int i = vec.length - 1;i >= 0 ;i--){
36             for(int j = 0;j < vec.length ;j++){
37                 if(j-i < 0) continue;
38                 System.out.print(vec[j][j-i] + " ");
39             }
40             System.out.println();
41         }

 

おすすめ

転載: www.cnblogs.com/oldhands/p/11681322.html
おすすめ