山東科技大學OJ蛇形填陣
阿新 • • 發佈:2019-01-14
蛇形填陣問題主要利用二維陣列解決,但賦值是一大難題,只要掌握了這條“蛇”的運動方向就可以輕鬆搞定啦,這裡用到了平常不常用的++shu操作,意思就是先用這個數在實行++操作。
while (x + 1 < n && !a[x + 1][y]) a[++x][y] = ++shu; while (y - 1 >= 0 && !a[x][y - 1]) a[x][--y] = ++shu; while (x - 1 >= 0 && !a[x - 1][y]) a[--x][y] = ++shu; while (y + 1 < n && !a[x][y + 1]) a[x][++y] = ++shu;
第一行就是蛇從右上角向右下角運動時的賦值;
第二行就是蛇從右下角向左下角運動時的賦值;
第三行就是蛇從左下角向左上角運動時的賦值;
第四行就是蛇從左上角向右上角運動時的賦值;
。。。。。。。。。。。。。。。。。。。。
依次這樣迴圈直到數達到了n*n就停止。
喏~~~程式碼來啦!!!!!
#include<stdio.h> #include<string.h> #define maxn 55 int main() { int a[maxn][maxn]; //freopen("output.txt","w",stdout); int n, x, y, shu = 0; int i,j,k; while(scanf("%d", &n)==1) { memset(a, 0, sizeof(a)); a[x = 0][y = n - 1] = shu = 1; while (shu < n * n) { while (x + 1 < n && !a[x + 1][y]) a[++x][y] = ++shu; while (y - 1 >= 0 && !a[x][y - 1]) a[x][--y] = ++shu; while (x - 1 >= 0 && !a[x - 1][y]) a[--x][y] = ++shu; while (y + 1 < n && !a[x][y + 1]) a[x][++y] = ++shu; } for(i=0;i<n;i++) { printf("%d",a[i][0]); for(j=1;j<n;j++) printf(" %d",a[i][j]); printf("\n"); } printf("\n"); } return 0; }
希望大家多多關注,小鑫會很努力地寫部落格的,我在這給各位大爺跪下了 噗通~~~~~~!