【經典演算法】:蛇形填數,最簡單的方法了。。。
阿新 • • 發佈:2019-02-13
問題概述
什麼是蛇形填數,百度一下即可
解法
你能發現這裡面的數為1到 n*n;
所以寫個迴圈即可
while(count<n*n){
while(x+1<n && !a[x+1][y]) a[++x][y]=++count;//右下
while(y-1>=0 &&!a[x][y-1]) a[x][--y]=++count;//向左
while(x-1>=0 &&!a[x-1][y]) a[--x][y]=++count;//左上
while(y+1<n &&!a[x][y+1]) a[x][++y]=++count;//向右
}
填過的地方不為0了,所以不再填一次
詳細程式碼
#include <iostream>
#include <iomanip>
using namespace std;
int a[100][100];
void main(){
int n,count,x,y;
cin>>n;
memset(a,0,sizeof(a)); //初始化為0
count = a[x=0][y=n-1] = 1;
while(count<n*n){
while(x+1<n && !a[x+1 ][y]) a[++x][y]=++count;
while(y-1>=0 &&!a[x][y-1]) a[x][--y]=++count;
while(x-1>=0 &&!a[x-1][y]) a[--x][y]=++count;
while(y+1<n &&!a[x][y+1]) a[x][++y] =++count;
}
for(x=0;x<n;x++){ //輸出
for(y=0;y<n;y++){
cout <<setw(5)<<a[x][y];
}
cout<<endl;
}
}
執行截圖
Happy Coding
Seen