qq_52177468 2021-06-09 16:38 采纳率: 20%
浏览 166

c语言编译器没有报错,但没有输出.....

#include<stdio.h>

int maze[8][8]= {{0,0,0,0,0,0,0,0},{0,1,1,1,1,0,1,0},{0,0,0,0,1,0,1,0},{0,1,0,0,0,0,1,0},{0,1,0,1,1,0,1,0},{0,1,0,0,0,0,1,1},{0,1,0,0,1,0,0,0},{0,1,1,1,1,1,1,0}},fx[4]= {1,-1,0,0},fy[4]= {0,0,-1,1};

int i,j,k,total;

void search(int i,int j);
void Out();
int check(int i,int j,int k);

int main()
{   int total=0;
    maze[1][1]=3;
    search(1,1);
    return 0;
}
void search(int i,int j)
{   int k,newi,newj;
    for(k=1; k<=4; k++)
        if(check(i,j,k)==1)
        {   newi=i+fx[k];
            newj=j+fy[k];
            maze[newi][newj]=3;
            if(newi==8&&newj==8)
                Out();

            else
                search(newi,newj);
        }
    maze[i][j]=2;
}
void Out()
{   int i,j;
    for(i=1; i<=8; i++)
    {   printf("\n");
        for(j=1; j<=8; j++)
            if(maze[i][j]==3)
            {   printf("V");
                total++;
            }
            else
                printf("*");
    }
    printf("Total is %d\n",total);
}
int check(int i,int j,int k)
{   int flag=1;
    i=i+fx[k];
    j=j+fy[k];
    if(i<1||i>8||j<1||j>8)
        flag=0;
    else if(maze[i][j]!=0)
        flag=0;
    return flag;
}

  • 写回答

4条回答 默认 最新

  • CSDN专家-link 2021-06-09 16:41
    关注

     for(k=1; k<=4; k++)
            if(check(i,j,k)==1)
            {   newi=i+fx[k];

    ==这肯定不行啊,fx就有四个数据,如果k=4的话,fx[k]就越界了,改成for(k=0;k<4;k++)。

     for(j=1; j<=8; j++)
                if(maze[i][j]==3)也存在同类问题

    你要记住一个事:数组下标是从0开始的。如果数组长度是8,下标就是0到7,下标为8就越界了。

    你的代码全是这个错误

    评论

报告相同问题?