c++一段中为什么有时候不能输出正确答案????

2025-04-07 10:49:49
推荐回答(3个)
回答1:

#include "stdio.h"
#include "stdlib.h"
#define SIZE 9
#define START_I 1
#define START_J 1
#define END_I 7
#define END_J 7

void visit (int maze[SIZE][SIZE],int,int);
int arrived (int maze[][SIZE]);//把i,j去掉了,因为函数中没用到它们
void printfout (int maze[][SIZE]);
int main (void)
{
int maze[SIZE][SIZE]={{2,2,2,2,2,2,2,2,2},
{2,0,0,0,0,2,2,0,2},
{2,0,2,2,0,2,2,0,2},
{2,0,2,2,0,0,2,0,2},
{2,0,2,2,0,0,2,0,2},
{2,0,0,2,2,0,2,0,2},
{2,0,0,2,2,2,0,0,2},
{2,0,0,0,0,0,0,0,2},
{2,2,2,2,2,2,2,2,2}};
visit (maze,START_I,START_J);
return 0;
}

void visit (int maze[][SIZE],int i,int j)
{
maze[i][j]=1;
if (arrived(maze)) // 把i,j去掉了
{
printfout(maze);
}
if (maze[i][j+1]==0)
visit (maze,i,j+1);
if (maze[i+1][j]==0)
visit (maze,i+1,j);
if (maze[i][j-1]==0)
visit (maze,i,j-1);
if (maze[i-1][j]==0)
visit (maze,i-1,j);
maze[i][j]=0;
}

int arrived(int maze[][SIZE]) //按你之前的写法,是传进了一个常数,所以出错,这里只要传进去maze这个整型数组进去就行。而且没有用到i,j,把它们去掉。
{
return maze[END_I][END_J];
}

void printfout(int maze[][SIZE])
{
int i,j;
for (i=0;i {
for (j=0;j {
if (maze[i][j]==2)
printf("■");
else if (maze[i][j]==1)
printf("○");
else
printf(" ");
}
printf("\n");
}
}
输出图案是:

■■■■■■■■■
■○ ■■ ■
■○■■ ■■ ■
■○■■ ■ ■
■○■■ ■ ■
■○ ■■ ■ ■
■○ ■■■○○■
■○○○○○○○■
■■■■■■■■■

回答2:

#include "stdio.h"
#include "stdlib.h"
#define SIZE 9
#define START_I 1
#define START_J 1
#define END_I 7
#define END_J 7

int arrived(int maze[SIZE][SIZE],int i,int j)
{
return maze[END_I][END_J];
}

void printfout(int maze[][SIZE])
{
int i,j;
for (i=0;i {
for (j=0;j {
if (maze[i][j]==2)
printf("■");
else if (maze[i][j]==1)
printf("○");
else
printf(" ");
}
printf("\n");
}
}
void visit (int maze[][SIZE],int i,int j)
{
maze[i][j]=1;
if (arrived(maze,i,j))
{
printfout(maze);
}
if (maze[i][j+1]==0)
visit (maze,i,j+1);
if (maze[i+1][j]==0)
visit (maze,i+1,j);
if (maze[i][j-1]==0)
visit (maze,i,j-1);
if (maze[i-1][j]==0)
visit (maze,i-1,j);
maze[i][j]=0;
}

int main (void)
{
int maze[SIZE][SIZE]={{2,2,2,2,2,2,2,2,2},
{2,0,0,0,0,2,2,0,2},
{2,0,2,2,0,2,2,0,2},
{2,0,2,2,0,0,2,0,2},
{2,0,2,2,0,0,2,0,2},
{2,0,0,2,2,0,2,0,2},
{2,0,0,2,2,2,0,0,2},
{2,0,0,0,0,0,0,0,2},
{2,2,2,2,2,2,2,2,2}};
visit (maze,START_I,START_J);
return 0;
}

回答3:

#include "stdio.h"
#include "stdlib.h"
#define SIZE 9
#define START_I 1
#define START_J 1
#define END_I 7
#define END_J 7

void visit (int maze[SIZE][SIZE],int,int);
int arrived (int maze[][SIZE],int,int);
void printfout (int maze[][SIZE]);
int main (void)
{
int maze[SIZE][SIZE]={{2,2,2,2,2,2,2,2,2},
{2,0,0,0,0,2,2,0,2},
{2,0,2,2,0,2,2,0,2},
{2,0,2,2,0,0,2,0,2},
{2,0,2,2,0,0,2,0,2},
{2,0,0,2,2,0,2,0,2},
{2,0,0,2,2,2,0,0,2},
{2,0,0,0,0,0,0,0,2},
{2,2,2,2,2,2,2,2,2}};
visit (maze,START_I,START_J);
return 0;
}

void visit (int maze[][SIZE],int i,int j)
{
maze[i][j]=1;
if (arrived(maze,i,j))
{
printfout(maze);
maze[i][j]=0;
return;
}
if (maze[i][j+1]==0)
visit (maze,i,j+1);
if (maze[i+1][j]==0)
visit (maze,i+1,j);
if (maze[i][j-1]==0)
visit (maze,i,j-1);
if (maze[i-1][j]==0)
visit (maze,i-1,j);
maze[i][j]=0;
}

int arrived(int maze[][SIZE],int i,int j)
{
return maze[END_I][END_J];
}

void printfout(int maze[][SIZE])
{
int i,j;
for (i=0;i {
for (j=0;j {
if (maze[i][j]==2)
printf("■");
else if (maze[i][j]==1)
printf("○");
else
printf(" ");
}
printf("\n");
}
}