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 }