金沙国际官网_金沙国际平台登录

因为这个金沙国际官网_金沙国际平台登录网站与很多的大型澳门赌场都有合作,金沙国际官网_金沙国际平台登录尽职尽责,高效执行,保持好奇心,不断学习,追求卓越,点击进入金沙国际官网_金沙国际平台登录马上体验吧,所以现在也正式地开始了营业。

您的位置:金沙国际官网 > 金沙国际平台登录 > C语言中将二维数组作为参数传递给函数的方法,

C语言中将二维数组作为参数传递给函数的方法,

发布时间:2020-01-05 02:14编辑:金沙国际平台登录浏览(123)

    转自:

    最简单的有以下四个函数也就是四个步骤:

    以矩阵形式表示迷宫。请自行脑补一个二维矩阵。

     

    1.病人把病历本交到护士手中,相当于进队;

    具体思路:如果当前位置的三个方向(除了来时的方向)至少有一个方向可通,则将此点的坐标个可通的方向存入栈顶,如此重复,直到出口;如果当前位置的三个方向都不可通,则表明从当前位置无法再往前走,此时需要将栈顶元素出栈(当前位置的坐标),再沿原路返回到前一个结点,从该点看是否有其他的可行方向,如果也没有,则再往回退一步;如果有,则沿着新的方向向前探索。

    #include <stdio.h>
    /********************************* 
    * 方法1: 第一维的长度可以不指定 * 
    * 但必须指定第二维的长度 * 
    *********************************/ 
    void print_a(int a[][5], int n, int m) 
    { 
    int i, j; 
    
    for(i = 0; i < n; i++) 
    { 
    for(j = 0; j < m; j++) 
    printf("%d ", a[i][j]); 
    
    printf("n"); 
    } 
    } 
    /***************************************** 
    *方法2: 指向一个有5个元素一维数组的指针 * 
    *****************************************/ 
    void print_b(int (*a)[5], int n, int m) 
    { 
    int i, j; 
    
    for(i = 0; i < n; i++) 
    { 
    for(j = 0; j < m; j++) 
    printf("%d ", a[i][j]); 
    printf("n"); 
    } 
    }
    /*********************************** 
    *方法3: 利用数组是顺序存储的特性, * 
    * 通过降维来访问原数组! * 
    ***********************************/ 
    void print_c(int *a, int n, int m) 
    { 
    int i, j; 
    
    for(i = 0; i < n; i++) 
    { 
    for(j = 0; j < m; j++) 
    printf("%d ", *(a + i*m + j)); 
    
    printf("n"); 
    } 
    }
    int main(void) 
    { 
    int a[5][5] = {{1, 2}, {3, 4, 5}, {6}, {7}, {0, 8}}; 
    
    printf("n方法1:n"); 
    print_a(a, 5, 5); 
    
    printf("n方法2:n"); 
    print_b(a, 5, 5); 
    
    printf("n方法3:n"); 
    print_c(&a[0][0], 5, 5); 
    
    getch(); 
    return 0; 
    } 
    

    2.排在最前面的病人先看,同时取走病历,相当于出队;

    #include <stdio.h>
    #include <stdlib.h>
    //#include "stdirectiono.h"
    #define H 6
    #define W 6
    #define maximum 20
    int map[H][W]=            //二维矩阵,0代表可以通过,1代表是墙壁
    {
        {1,1,1,1,1,1},
        {1,0,0,0,1,1},
        {1,0,1,0,0,1},
        {1,0,0,0,1,1},
        {1,1,0,0,0,1},
        {1,1,1,1,1,1},
    };
    int top=-1;
    int mindirections=maximum;     //最短路径长度
    struct
    {
        int i;
        int j;
        int direction;
    }Stack[maximum],Path[maximum];
    void maze()
    {
        int count=-1;
        int i,j,direction,find;
        top++;
        Stack[top].i=1;Stack[top].j=1;
        Stack[top].direction=-1;
        map[1][1]=-1;
        while(top>-1)
        {
            i=Stack[top].i;j=Stack[top].j;
            direction=Stack[top].direction;
            if(i==H-2 && j==W-2)
            {
                int k;
                for(k=0;k<=top;k++)
                {
                    printf("[%d,%d]",Stack[k].i,Stack[k].j);
                    if((k+1)%5==0)
                        printf("n");
                }
                printf("n");
                if(top+1<mindirections)
                {
                    for(k=0;k<=top;k++)
                        Path[k]=Stack[k];
                    mindirections=top+1;
                }
                map[Stack[top].i][Stack[top].j]=0;
                top--;
                i=Stack[top].i;
                j=Stack[top].j;
                direction=Stack[top].direction;
            }
            find=0;
            while(direction<4&&find==0)
            {
                direction++;
                switch(direction)
                {
                    case  0:i=Stack[top].i-1;j=Stack[top].j;break;
                    case  1:i=Stack[top].i;j=Stack[top].j+1;break;
                    case  2:i=Stack[top].i+1;j=Stack[top].j;break;
                    case  3:i=Stack[top].i;j=Stack[top].j-1;break;
                }
                if(map[i][j]==0) find=1;
            }
            if(find==1)
            {
                Stack[top].direction=direction;
                top++;
                Stack[top].i=i;
                Stack[top].j=j;
                Stack[top].direction=-1;
                map[i][j]=-1;
            }
            else
            {
                map[Stack[top].i][Stack[top].j]=0;
                top--;
            }
        }
        printf("最短路径长度:%dn",mindirections);
        printf("最短路径:n");
        int k;
        for(k=0;k<mindirections;k++)
        {
            printf("[%d,%d]",Path[k].i,Path[k].j);
            if((k+1)%4)
                printf("n");
        }
        printf("n");
    }
    int main()
    {
        printf("迷宫所有路径:n");
        maze();
        return 0;
    }
    

    本文由金沙国际官网发布于金沙国际平台登录,转载请注明出处:C语言中将二维数组作为参数传递给函数的方法,

    关键词: