LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
123
返回列表 发新帖
楼主: chaiking

求算法

[复制链接]
发表于 2006-9-13 21:15:19 | 显示全部楼层
//好久原来写的.

#include <iostream>
#include <iomanip>

int main(void)
{
        int M;
        std::cin >> M;
        int k=1;
        int RNUM[M][M];
        for(int a=0;a<(M+1)/2;a++)
        {
                RNUM[a][a]=k;
                for(int b=a;b<M-a-1;b++)
                {
                        RNUM[a]=k;
                        k++;
                }
                for(int c=a;c<M-a-1;c++)
                {
                        RNUM[c][M-a-1]=k;
                        k++;
                }
                for(int d=M-a-1;d>a;d--)
                {
                        RNUM[M-a-1][d]=k;
                        k++;
                }
                for(int e=M-a-1;e>a;e--)
                {
                        RNUM[e][a]=k;
                        k++;
                }
        }
        for(int a1=0;a1<M;a1++)
        {
                for(int a2=0;a2<M;a2++)
                {
                        std::cout<<std::setw(8)<<RNUM[a1][a2];
                }
                std::cout<<std::endl;
        }
        return 0;
}
回复 支持 反对

使用道具 举报

发表于 2006-9-29 20:53:41 | 显示全部楼层
其实这个问题是迷宫问题的简化版本
定义array[n][n]全零,int i=1
从array[0][0]开始,置i++,设定4个方向,现向array[0][n],方向移动,并且把array[m][n]置i;碰到行列尽头或者array[m][n]!=0的时候则,按照前面的方向顺时针转1个方向。
另外有递归算法也很好解决。
严蔚敏编的《数据结构(C语言)》第3章:栈和队列里面有算法。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表