C++蛇形填充數組

這裏介紹兩種蛇形填充

第一種:

我們設座標(X,Y)我們從1開始(0,n-1)然後就是下,下,下,左,左,左,上,上,上。總之每一條路徑都是走到盡頭;我們採用先試探再賦值的方法。

#include <iostream>
#include <iomanip>
#include <cstring>
int a[10][10];
using namespace std;
int main ()
{int n,x,y,pp;
cin>>n;
memset(a,0,sizeof(a)); //初始化數組a全爲0
pp=a[x=0][y=n-1]=1; 
while (pp<n*n)
{ while (x+1<n&&a[x+1][y]==0) a[++x][y]=++pp;//先判斷再下移
  while (y-1>=0&&!a[x][y-1]) a[x][--y]=++pp;//這裏a[x+1][y]==0等價於!a[x][y-1]
  while (x-1>=0&&!a[x-1][y]) a[--x][y]=++pp;
  while (y+1<n&&!a[x][y+1]) a[x][++y]=++pp;
  }
  for(int i=0;i<n;i++)
  {
  for (int j=0;j<n;j++)
  cout<<setw(3)<<a[i][j];
  cout<<endl;
  }
  return 0;
  }

此解的巧妙之處在於數組初始化爲0;
再介紹一下memset 函數;
memset 又叫初始化函數是計算機中C/C++語言初始化函數。作用是將某一塊內存中的內容全部設置爲指定值;頭文件 <cstring>
程序中memset(a,0,sizeof(a)) 將數組a初始化爲0;sizeof(a)是數組a的長度。
輸入:5
輸出:在這裏插入圖片描述

第二種蛇形填充 數組

用數字1,2,3,4,…,nn這n2個數蛇形填充規模爲nn的方陣。
在這裏插入圖片描述

#include <iostream>
using namespace std;
int main()
{
   int n, i, j, x=1;
   int a[10][10]={0};
   cin >> n;
   for(i=0;i<=2*n-2;i++)
   {
       for(j=i;j>=0;j--)
       {
           if(j<n&i-j<n)
           {
             if(i%2!=0)
                 a[i-j][j] = x++;     //這裏分兩步先把數組賦值爲x,再x變爲x++
               else
                   a[j][i-j] = x++;
           }
       }
   }
   for(i=0;i<n;i++)
   { for(j=0;j<n;j++)
    cout<<a[i][j]<<" ";
  cout<<endl;}
 } 
  
 
     

在這裏插入圖片描述
在這裏插入圖片描述
通過判斷[0][0];[1][1]; [2][2]; [3][3]

發佈了15 篇原創文章 · 獲贊 18 · 訪問量 8232
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章