cは2つの数を入力して、第1の数は1つのnXnの行列を決定して、第2の数は1から値を割り当てることを決定して、値の上限(MDは半日時間を費やして、構想は死人を害しません)
12596 ワード
1 , nXn , 1 , 2 3 : 4 5 :5 18 6 7 : 8 9 1 2 3 4 5 10 11 16 17 18 0 6 12 13 15 0 0 0 7 14 15 14 0 0 0 8 16 17 13 12 11 10 9 18 19 20 21 : 4 12 22 23 : 24 25 1 2 3 4 26 27 12 0 0 5 28 29 11 0 0 6 30 31 10 9 8 7 32 33 #include<stdio.h> 34 35 int main(void) 36 { 37 int n,m,i,j,temp; 38 int dir = 0; //0 ,1 ,2 ,3 , 39 scanf("%d%d",&m,&n); 40 int arr[m][m]; 41 42 // arr[m][m] = {0} 43 for(i=0; i<m; i++) 44 { 45 for(j=0; j<m; j++) 46 { 47 arr[i][j] = 0; 48 } 49 } 50 51 i = j = 0; 52 temp = 1; 53 while(temp <= m*m) 54 { 55 if(temp > n)break; 56 arr[i][j] = temp; 57 switch(dir) 58 { 59 case 0: 60 { 61 if(j+1 == m || arr[i][j+1] > 0) 62 { 63 i++; 64 dir = 1; 65 } 66 else j++; break; 67 } 68 case 1: 69 { 70 if(i+1 == m || arr[i+1][j] > 0) 71 { 72 j--; 73 dir = 2; 74 } 75 else i++; break; 76 } 77 case 2: 78 { 79 if(j - 1 < 0 || arr[i][j-1] > 0) 80 { 81 i--; 82 dir = 3; 83 } 84 else j--; break; 85 } 86 case 3: 87 { 88 if(arr[i-1][j] > 0) 89 { 90 j++; 91 dir = 0; 92 } 93 else i--; break; 94 } 95 } 96 temp++; 97 } 98 99 // 100 for(i=0; i<m; i++) 101 { 102 for(j=0; j<m; j++) 103 { 104 printf("%3d",arr[i][j]); 105 } 106 printf("
"); 107 } 108 return 0; 109 }