演算法的樂趣c/c++ —— 1.1.4入門習題
阿新 • • 發佈:2018-12-26
宣告:摘選自“ 演算法競賽入門經典(第2版)”作者: 劉汝佳 / 陳鋒 ISBN:9787302291077
蛇形填數。在n×n方陣裡填入1,2,...,n×n,要求填成蛇形。例如,n = 4時方陣為:
10 11 12 1
9 16 13 2
8 15 14 3
7 6 5 4
#include<stdio.h> #include<string.h> int a[9][9]; int main() { int x, y, n, num; //x,y用於記錄元素座標,num為數值,座標系等同於矩陣座標系 scanf("%d", &n); memset(a, 0, sizeof(a)); //將矩陣初始化為全0矩陣 num = a[x=0][y=n-1] = 1; //初始化各變數的數值,以及矩陣元素的起始值 while(num < n*n) //迴圈讀入所有數值 { while(x+1<n && !a[x+1][y]) a[++x][y] = ++num; //走向↓,如果行數沒有超過n,並且下一個數是0,迴圈 while(y-1>=0 && !a[x][y-1]) a[x][--y] = ++num; //走向←,如果行數沒有超過n,並且下一個數是0,迴圈 while(x-1>=0 && !a[x-1][y]) a[--x][y] = ++num; //走向↑,如果行數沒有超過n,並且下一個數是0,迴圈 while(y+1<n && !a[x][y+1]) a[x][++y] = ++num; //走向→,如果行數沒有超過n,並且下一個數是0,迴圈 } for(x=0; x<n; x++) { for(y = 0; y < n; y++) printf("%3d", a[x][y]); printf("\n"); } return 0; }