1.我遇到了什么样的问题:
直接传值的话会出现调用错误,例如如下代码
#include <stdio.h>
#define MAX 100
int edge[MAX][MAX];
int graphsize=0;
int T=0;
int visited[MAX];
void scan(){
printf("请输入节点个数:\n");
scanf("%d",&graphsize);
int j=0,k=0;
for(;j<MAX;j++)
for(;k<MAX;k++)
edge[j][k]=0;
printf("请输入边的个数:\n");
scanf("%d",&T);
while(T--){
int x=0,y=0;
scanf("%d %d",&x,&y);
edge[x][y]=1;
}
int i=0;
for(;i < graphsize;i++)
visited[i] = 0;
}
void dfs_visited(int a[MAX][MAX],int u){
printf("%d ",u+1);
visited[u]=1;
int v = 0;
for(;v<graphsize;v++){
if(a[u][v]==1&&visited[v]==0)
dfs_visited(a,v);
}
}
void dfs(int b[MAX][MAX]){
int u = 0;
printf("%d",b[0][1]);
for(;u<graphsize;u++)
if(visited[u]==0)
dfs_visited(b,u);
}
int main(){
scan();
dfs(edge[MAX][MAX]);
}
这里面具体的错误自己调试一下便知道
2.我为什么遇到了这个问题:
我用邻接矩阵存储图的时候,进行深度优先遍历的时候,需要传递这个邻接矩阵作为实参,我直接使用二维数组的值传递方式;
3.我是怎么解决的:此时我就要思考到底怎么给子函数写形参才能正确传递实参,附上代码给解决:
#include <stdio.h>
#define MAX 100
int edge[MAX][MAX];
char vertex[MAX];
int visited[MAX];
int graphsize;
int T;
int(*p)[MAX][MAX]=&edge;
int scan(){
printf("输入节点个数:\n");
scanf("%d",&graphsize);
for(int i=0;i<graphsize;i++)
vertex[i]=i;
printf("输入边的条数:\n");
scanf("%d",&T);
while(T--){
int x=0,y=0;
scanf("%d",&x);
scanf("%d",&y);
edge[x][y]=1;
}
}
void dfs_visited(int(*dv)[MAX][MAX],int u){
printf("%d ",u+1);
visited[u]=1;
for(int v=0;v<graphsize;v++){
if((*((*dv)[u]+v))==1&&visited[v]==0)
dfs_visited(dv,v);
}
}
void dfs(int(*d)[MAX][MAX]){
int u=0;
for(;u<graphsize;u++){
if(visited[u]==0)
dfs_visited(d,u);
}
}
int main(){
scan();
dfs(p);
printf("\n");
}
4.在解决这个问题的时候我学习到了二维数组实参与形参的匹配方法:
至于上图中的很多概念自己思考吧。。。
一下提供一些参考链接:http://www.cnblogs.com/stoneJin/archive/2011/09/21/2184211.html