首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

旋转矩阵解决办法

2012-06-09 
旋转矩阵实现:N*N矩阵 0N10,例如:n 3时,输出为:123894765竞赛题,实在是想不出,还在努力。请大神们帮

旋转矩阵
实现:N*N矩阵; 0<=N<=10,

例如:n = 3时,
输出为:
123
894
765

竞赛题,实在是想不出,还在努力。


请大神们帮下忙,麻烦大家了。

[解决办法]
虽然有所不同,但思路却差不多的。参考:
C++面试题:循环数列问题
[解决办法]
KISS - Keep It Simple and Stupid.
仅供参考

C/C++ code
#include <stdio.h>#define MAXN 10char m[MAXN+2][MAXN+2];char d;int x,y,k,n;void main() {    while (1) {        printf("Input n(1..%d):",MAXN);        fflush(stdout);        rewind(stdin);        if (1==scanf("%d",&n)) {            if (1<=n && n<=MAXN) break;        }    }    y=0  ;for (x=0;x<=n+1;x++) m[y][x]=1;    y=n+1;for (x=0;x<=n+1;x++) m[y][x]=1;    x=0  ;for (y=0;y<=n+1;y++) m[y][x]=1;    x=n+1;for (y=0;y<=n+1;y++) m[y][x]=1;    for (y=1;y<=n;y++) {        for (x=1;x<=n;x++) {            m[y][x]=0;        }    }    x=1;    y=1;    k=0;    d='D';    while (1) {        k++;        if (k>n*n) break;        m[y][x]=k;        switch (d) {            case 'D':                if (0==m[y+1][x])  y++;                else              {x++;d='R';}            break;            case 'R':                if (0==m[y][x+1])  x++;                else              {y--;d='U';}            break;            case 'U':                if (0==m[y-1][x])  y--;                else              {x--;d='L';}            break;            case 'L':                if (0==m[y][x-1])  x--;                else              {y++;d='D';}            break;        }    }    for (y=1;y<=n;y++) {        for (x=1;x<=n;x++) {            printf("%4d",m[y][x]);        }        printf("\n");    }} 

热点排行