参数类型是void么?是一个指针么?指针类型能是void么?
这是一个函数指针,你看下面调用 Visit(V); 就知道了。void 是这个函数指针的返回值类型。
不知道你这个问题是否已经解决, 如果还没有解决的话:#include<stdio.h>
#include<stdlib.h>
#include<windows.h>
int book[51][51]; //检索坐标
int a[51][51]; //通路与障碍坐标
int maze[51][51]; //路径二维坐标
int n,m,p,q,min = 99999;//初始化最小值min
int path1[51],path2[51];//保存路径的x,y坐标
/*
int a[51][51] = {
{0,0,1,0,1,0,0},
{1,0,0,0,0,1,0},
{0,0,1,1,0,0,0},
{1,0,0,1,1,1,0},
{0,0,0,0,0,0,0},
{1,1,0,0,1,0,1},
{1,0,0,0,0,0,1},
};*/
/*创建移动方向*/
int next[4][2] = {
{0,1}, //right
{1,0}, //up
{0,-1}, //left
{-1,0} //down
};
void dfs(int x ,int y,int step){ //DFS深度优先
int tx,ty,k; //形参
if(x == q && y == p){ //出口,找到目标,登出
if(step < min){ //更新最短路径
min = step;
for(int i = 0; i < step; i++)printf("(%d,%d)",path1[i],path2[i]); //打印一维路径
for(int i = 0; i < n; i++){ //清除maze缓存
for(int j = 0; j < m; j++){
maze[i][j] = 0;
}
}
for(int i = 0; i < step; i++){ //由两个一维数组可构建一个二维数组
maze[path1[i]][path2[i]] = 5; //赋值5代表路径
}
printf("path = %d\n",min); //打印最小值
printf("\n");
}
return ; //此时的return代表返回上一步
}
for(k = 0; k <= 3; k++){ //移动方向,
tx = x + next[k][0]; //当前x加即将移动方向
ty = y + next[k][1]; //当前y加即将移动方向
if(tx < 1 || tx > n || ty < 1 || ty > m) //是否越界,越界跳出循环
continue;
if(a[tx][ty] == 0 && book[tx][ty] == 0){ //a代表障碍,0表示无,book代表是否检索过,0代表未
book[tx][ty] = 1; //表示该坐标已检索
path1[step] = tx; //缓存x
path2[step] = ty; //缓存y
dfs(tx,ty,step+1);//进入下一步DFS
/*以下是回溯,这里代表return后的步骤,即回溯*/
book[tx][ty] = 0; //已经回溯,还原该坐标,代表未检索
}
}
return ;
}
int main(){
int i,j,startx,starty;
printf("矩阵大小:");
scanf("%d %d",&n,&m);
printf("起始位置:");
scanf("%d %d",&startx,&starty);
printf("目标位置:");
scanf("%d %d",&q,&p);
book[startx][starty] = 1;//标记起始位置为已检索,在路径中不会显示起始位置,注释,即可显示
for(i = 0; i < n; i++){ //初始化
for(j = 0; j < m; j++){
a[i][j] = 0;
a[rand()%7][rand()%7] = 1;//随机生成墙
}
}
for(i = 0; i < n; i++){ //初始化
for(j = 0; j < m; j++){
maze[i][j] = 0;
if((i == startx) && (j == starty))a[i][j] = 0;
if((i == q) && (j == p))a[i][j] = 0;
}
}
dfs(startx,starty,0); //DFS深度优先开始,从起始位置,步数0开始
for(int heng = 0; heng < n; heng++){ //打印二维路径
for(int shu = 0; shu < m; shu++){
if(a[heng][shu] == 1) maze[heng][shu] = 1;
printf("%d",maze[heng][shu]);
}printf("\n");
}printf("\n");
return 0;
}
函数DFS的最后一个参数是指针类型,它是一个回调函数,用于遍历时访问每个被遍历的节点。该回调函数的类型可以是任意类型,包括void类型。因为回调函数的类型由实际情况决定,因此它可以是任意类型。通常,回调函数会在每个节点被访问时执行。该函数的参数包括图的顶点和遍历状态。回调函数可以根据自己的需要访问顶点和状态。在实现回调函数时,可以考虑使用函数指针或lambda表达式。