| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3121 人关注过本帖
标题:[已解决]动态申请二维数组作为参数传递进函数里
只看楼主 加入收藏
live41
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:67
帖 子:12442
专家分:0
注 册:2004-7-22
结帖率:66.67%
收藏
 问题点数:0 回复次数:7 
[已解决]动态申请二维数组作为参数传递进函数里

这个是main函数的部分: //下面动态创建二维数组,C++方式 int **connect=new int*[N]; for(i=0; i<N; i++) connect[i]=new int[N];

//先给全部元素赋0值 for(i=0; i<N; i++) for(j=0;j<N;j++) connect[i][j]=0; int *visited=new int[N]; travel(connect,visited,0,N); //调用函数

下面是函数,但是我不知道怎样把connect数组传进去,要可以修改connect的值的那种 void travel(int **matrix,int visited[],int i,int n) //这里写**matrix不行啊! { cout<<i<<endl; visited[i]=true; for(int j=0; j<n; j++) if(matrix[i][j]!=0&&!visited[j]) travel(matrix,visited,j,n); //这里要递归,也不行,怎么办? }

请高手不吝指点,小弟感激不尽啊!

[此贴子已经被作者于2004-12-02 11:14:47编辑过]

搜索更多相关主题的帖子: 参数 动态 申请 
2004-11-20 23:00
C++大粉丝
Rank: 4
等 级:贵宾
威 望:10
帖 子:477
专家分:0
注 册:2004-4-23
收藏
得分:0 

...你的程序逻辑存在些问题,我不明白.所以我就修改了你的程序,做了最简单的事情.

#include <windows.h> #include <iostream> using std::cout; using std::endl;

#define N 20

void travel(int** matrix,int* visited,int i) { if (i == N) return ;

*visited = i;

*matrix = visited;

travel(++matrix,++visited,++i); }

int main(int argc, char* argv[]) { int **connect = NULL; connect = new int*[N];

if (!connect) return 0; memset(connect,0,N*sizeof(int));

int* visited = NULL; visited = new int[N]; if (!visited) { delete[] connect; return 0; } memset(visited,0,N);

int **result = connect; int **output = connect; travel(result,visited,0); for (int i=0;i<N;++i) cout << **(output++) << endl;

delete[] visited; delete[] connect; return 0; }


I am a big fan of c plus plus.
2004-11-20 23:50
Knocker
Rank: 8Rank: 8
等 级:贵宾
威 望:47
帖 子:10454
专家分:603
注 册:2004-6-1
收藏
得分:0 

#include <stdio.h> #include <string.h> #include <malloc.h> #include <process.h> void travel(int **str,int n,int m); int main(void) { int **str; int j,i,n,m;

scanf("%d",&n); if ((str = (int** )malloc(n*( sizeof(int *) ))) == NULL) { printf("Not enough memory to allocate buffer\n"); exit(1); } scanf("%d",&m); for(i=0;i<n;i++) if ((str[i] = (int *)malloc(m*(sizeof(int )))) == NULL) { printf("Not enough memory to allocate buffer\n"); exit(1); }

travel(str,n,m);

for(i=0;i<n;i++) { for(j=0;j<m;j++) printf("%3d", str[i][j]); printf("\n"); }

for(i=0;i<n;i++) free(str[i]); free(str); return 0; } void travel(int **str,int n,int m) { int i,j,t=0; for(i=0; i<n; i++) for(j=0; j<m; j++) str[i][j]=t++;

}

VC6.0下通过,怎改成c++是你的事


九洲方除百尺冰,映秀又遭蛮牛耕。汽笛嘶鸣国旗半,哀伤尽处是重生。     -老K
治国就是治吏。礼义廉耻,国之四维。四维不张,国之不国。   -毛泽东
2004-11-21 00:13
Knocker
Rank: 8Rank: 8
等 级:贵宾
威 望:47
帖 子:10454
专家分:603
注 册:2004-6-1
收藏
得分:0 
哈,楼上有人答了,我多事了

九洲方除百尺冰,映秀又遭蛮牛耕。汽笛嘶鸣国旗半,哀伤尽处是重生。     -老K
治国就是治吏。礼义廉耻,国之四维。四维不张,国之不国。   -毛泽东
2004-11-21 00:15
live41
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:67
帖 子:12442
专家分:0
注 册:2004-7-22
收藏
得分:0 
首先感谢 VC6程序员,不过我代码中有递归,怎么办?
2004-11-21 00:24
live41
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:67
帖 子:12442
专家分:0
注 册:2004-7-22
收藏
得分:0 
完整代码是这样的,怎么改?

#include<string> #include<iostream> #include<fstream> using namespace std;

//void travel(int ***matrix,int visited[],int i,int n);

void travel(int *matrix[],int visited[],int i,int n) { cout<<i<<endl; visited[i]=true; for(int j=0; j<n; j++) if(matrix[i][j]!=0&&!visited[j]) travel(matrix,visited,j,n); }

void main() { int N,V;

//下面打开文件,C++方式打开 fstream file1; file1.open("E:\\travel.txt"); file1>>N>>V; //取到城市数和通道数 V*=2; //一条通道有两个城市

string *city=new string[N]; //动态申请数组,C++方式 string *route=new string[V];

for(int i=0;i<N;i++) file1>>city[i]; //先把单个城市名储存,string数组

int start=-1; //第一个起点 for(int j=0;j<V;j++) { file1>>route[j]; //路径,双数是前一个,单数是后一个 if(j%2==0&&start!=0) //判断如果起点航班存在 start=city[0].compare(route[j]); }

file1.close(); //关闭文件,C++方式 if(start!=0) //如果连起点航班都没有就退出,例如Vancouver存在 exit(0); //下面动态创建二维数组,C++方式 int **connect=new int*[N]; for(i=0; i<N; i++) connect[i]=new int[N];

//先给全部元素赋0值 for(i=0; i<N; i++) for(j=0;j<N;j++) connect[i][j]=0;

//下面循环是处理当遇到连通的两个地点,就赋1值 for(int k=0; k<V; k+=2) { for(i=0; i<N; i++) if(!(route[k].compare(city[i]))) break; for(j=0; j<N; j++) if(!(route[k+1].compare(city[j]))) break;

connect[i][j]=connect[j][i]=1; }

//先把图输出,看看正确否 for(i=0; i<N; i++) { for(j=0; j<N; j++) cout<<connect[i][j]<<" "; cout<<endl; }

int *visited=new int[N];

travel(connect,visited,0,N);

//清除刚才申请的内存,包括之前申请的字符串内存,C++方式 for(i=0; i<N; i++) delete[] connect[i]; delete[] connect; delete[] route; delete[] city; }

2004-11-21 00:25
_我爱我家_
Rank: 1
等 级:新手上路
帖 子:24
专家分:0
注 册:2004-10-31
收藏
得分:0 

感觉好象是一个数据结构的实习题(猜的),递归遍历整个图

你可以在外面动态申请二维数组,也就是说用这个二维数组是个全局变量,这样就可以在程序的任何地方修改了

你看可以吗?


最近很忙,要考试 所以如果有什么不便的地方,请大虾们多包涵
2004-11-28 19:46
live41
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:67
帖 子:12442
专家分:0
注 册:2004-7-22
收藏
得分:0 
不好,那样就破坏了平衡。
2004-12-02 11:13
快速回复:[已解决]动态申请二维数组作为参数传递进函数里
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017389 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved