注册 登录
编程论坛 C++教室

如何输入一个数来确定2维数组的规格

mylzy159 发布于 2010-04-26 17:18, 663 次点击
#include<iostream>
using namespace std;
int a[5][5];
void fun(int x,int y,int n,int sum)
{
    if(a[x][y]==0)
    {
        sum++;
        a[x][y]=sum;
        fun(x,y,n,sum);
    }
    if(a[x][y+1]==0&&y+1<n)
    {
        y++;
        sum++;
        a[x][y]=sum;
        fun(x,y,n,sum);
    }
    if(a[x+1][y]==0&&x+1<n)
    {
        x++;
        sum++;
        a[x][y]=sum;
        fun(x,y,n,sum);
    }
    if(a[x][y-1]==0&&y-1>=0)
    {
        y--;
        sum++;
        a[x][y]=sum;
        fun(x,y,n,sum);
    }
    if(a[x-1][y]==0)
    {
        while(a[x-1][y]==0)
        {
            x--;
            sum++;
            a[x][y]=sum;
        }
        fun(x,y,n,sum);
    }
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<n;j++)
            cout<<a[i][j]<<' ';
        cout<<endl;
    }
    exit(0);
}
void main()
{
    int n,x=0,y=0,sum=0;
    n=5;
    for(int i=0;i<n;i++)
        for(int j=0;j<n;j++)
            a[i][j]=0;
    fun(x,y,n,sum);
}
如何输入一个数来确定2维数组的规格..求教.这螺旋问题是要求输入一个数.我把他定成了5..
8 回复
#2
南国利剑2010-04-26 18:23
你是根据全局的变量自动初始化为0来判断,
a[x][y]是否是数组的元素是吗?
这样做似乎不是很保险噢,
如果越界了,而且这个内存部分也是存储0怎么办?
编译器也不会报错。

你是要实现什么功能呢?或许用动态数组会比较好。
#3
mylzy1592010-04-27 09:05
回复 2楼 南国利剑
就是输入一个数N...让2维数组变成a[N][N]的规格..动态数组?..要用vector?
#4
shiyuehai2010-04-27 09:12
动态数组不是这样实现的吧!!!再说你都定义数组的为a[5][5]怎么还能动态啊
#5
mylzy1592010-04-27 16:47
回复 4楼 shiyuehai
我知道..我把题目贴出来吧/. 看你们怎么做的.
  输入一个数N..输出一个螺旋型的矩阵..
 例如输入5  .     输出

                                    1 2 3 4 5
                                    16 17 18 19 6
                                    15 24 25 20 7
                                    14 23 22 21 8
                                    13 12 11 10 9
#6
南国利剑2010-04-27 19:27
我给你提供一个程序,看看是否符合你的要求。(不是我写的,引用的)
程序代码:
#include<stdio.h>
int main(void)
{
    int i,x,j,y,n,a[20][20],k;
    printf("input :");
    scanf("%d",&n);
    for (i=0,y=0,k=1;i<n;i++)
    {
        x=i;
        while (x<n-i)a[x++][y]=k++;x--;k--;
        while (y<n-i)a[x][y++]=k++;y--;k--;
        while (x+1>i)a[x--][y]=k++;x++;k--;
        while (y>i)a[x][y--]=k++;y++;
    }
    printf("\n");
    for (i=0;i<n;i++)
    {
        for (j=0;j<n;j++)
            printf("%6d",a[j][i]);
        printf("\n");
    }
    return 0;
}

#7
南国利剑2010-04-27 19:28
还有一个
程序代码:
#include <stdio.h>
#include <stdlib.h>

int main()
{
    int **a;
    int i,j;
    int n=1,row,direction;

    printf("Input the number of rows:");
    scanf("%d",&row);

    //set matrix
    a = (int **)malloc((row+2)*sizeof(int *));
    for (i=0;i<row+2 ;i++ )
        a[i]=(int *)calloc(row+2,sizeof(int));

    //initail wall
    for (i=0;i<row+2 ;i++ )
    {
        a[i][0]=1;
        a[0][i]=1;
        a[i][row+1]=1;
        a[row+1][i]=1;
    }
    i=1;
    j=1;
    a[1][1]=1;
    direction=1; /* 1 right,2 down,3 left, 4 up */
  
    while(n<row*row)
    {
        if (direction==1)
        {
            if (a[i][j+1]!=0)
            {
                direction=2;
                continue;
            }
            a[i][++j] = ++n;
        }   
        else if(direction==2)
        {
            if (a[i+1][j]!=0)
            {
                direction=3;
                continue;
            }
            a[++i][j] = ++n;
        }
        else if(direction==3)
        {
            if (a[i][j-1]!=0)
            {
                direction=4;
                continue;
            }
            a[i][--j] = ++n;
        }
        else
        {
            if (a[i-1][j]!=0)
            {
                direction=1;
                continue;
            }
            a[--i][j] = ++n;
        }
    }

    //printf
    for (i=1;i<=row ;i++ )
    {
        for (j=1;j<=row ;j++ )
            printf("%d ",a[i][j]);
        printf("\n");
    }

    return 0;
}

 
#8
mylzy1592010-04-27 19:56
回复 7楼 南国利剑
  嗯..第2个跟我的有点类似..其实我不想定义全局2维数组的..我想把2维数组传到fun()里面.但是我不会.. 就说第2个是用的动态数组.要是我用.怎么传到我的fun函数里面啊.?
 
#9
mylzy1592010-04-28 17:23
#include<iostream>
using namespace std;
void fun(int **a,int x,int y,int n,int sum)
{
    if(a[x][y]==0)
    {
        sum++;
        a[x][y]=sum;
        fun(a,x,y,n,sum);
    }
    if(a[x][y+1]==0&&y+1<n)
    {
        y++;
        sum++;
        a[x][y]=sum;
        fun(a,x,y,n,sum);
    }
    if(x+1<n)
    {
        if(a[x+1][y]==0)
        {
            x++;
            sum++;
            a[x][y]=sum;
            fun(a,x,y,n,sum);
        }
    }
    if(a[x][y-1]==0&&y-1>=0)
    {
        y--;
        sum++;
        a[x][y]=sum;
        fun(a,x,y,n,sum);
    }
    if(a[x-1][y]==0)
    {
        while(a[x-1][y]==0)
        {
            x--;
            sum++;
            a[x][y]=sum;
        }
        fun(a,x,y,n,sum);
    }
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<n;j++)
            cout<<a[i][j]<<' ';
        cout<<endl;
    }
    exit(0);
}
void main()
{
    int n,x=0,y=0,sum=0;
    cin>>n;
    int **a=new int*[n];
    for(int i=0;i<n;i++)
        a[i]=new int[n];
    for(i=0;i<n;i++)
        for(int j=0;j<n;j++)
            a[i][j]=0;
    fun(a,x,y,n,sum);
}我自己改好了..谢谢你.
1