关于c语言中二维数组的思考
来源:互联网 发布:c语言编写的程序被称为 编辑:程序博客网 时间:2024/06/10 07:31
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
- 关于c语言中二维数组的思考
- c语言中二维数组的思考
- c语言中关于二维数组的指针访问
- C语言--关于二维数组
- c语言中二维数组的问题
- c语言中二维数组的问题
- c语言中二维数组的传递
- C语言中二维数组的问题
- 关于c语言中二维数组做参数
- C语言中关于指针,二维数组等的问题,一个有趣的发现
- 关于C语言中二维数组的P+1与*(P+1)个人浅见
- 关于C语言函数返回二维数组的做法
- 关于C语言的二维数组和指针
- C语言的二维数组
- C语言中二维数组、二维指针、指向指针的数组、指向数组的指针
- 9、C语言中二维数组及数组名及指向二维数组的指针变量
- 一个关于C语言二维数组问题
- C 语言 关于二维数组 传参 总结
- apt-get依赖库版本过高问题的解决(如何处理libqt4-dev在ubuntu的安装问题)
- 循环引用最常见的3种情况
- Ubuntu下搭建TFTP服务器【亲测】
- 第五周项目1.2-三角形类雏形
- Andriod被排出Linux内核的原因
- 关于c语言中二维数组的思考
- 17部委:庆六一增强儿童爱党爱国爱社会主义情感
- Linux实时性分析-schedule-调度器
- 中断解析
- 网络商城-PrestaShop
- mysql ERROR------FULLTEXT
- CSS3 -webkit-filter 滤镜效果
- matcaffe编译与测试
- 和学生的学习互动记录(10嵌)