动态申请了二维数组,不知道怎样作为参数传递进函数里

Clothos 2004-11-20 08:46:12
这个是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); //这里要递归,也不行,怎么办?
}

请高手不吝指点,小弟感激不尽啊!
...全文
378 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
llmingjie 2004-11-22
  • 打赏
  • 举报
回复
我用你的代码直接编译运行了一下,怎么没有报什么故呢
Clothos 2004-11-22
  • 打赏
  • 举报
回复
我用VC,谢谢楼上各位,是更容易一些,但如果到了一定要用的话呢?怎么办?还是没解决。
Clothos 2004-11-22
  • 打赏
  • 举报
回复
是没报错,但运行时错了,不好意思,麻烦到大家了,我一定把分送上。
xunknown 2004-11-22
  • 打赏
  • 举报
回复
你传一个指针和两个整数就可以啊了!
分配你的二维数组这样来:
int *pa = new int[N*N];
初始化你的二维数组这样:
for( i=0;i<N*N;i++)
{
*(pa+i) = 0;
}

fun( int *pa, unsigned int int one, unsigned int two)
{
////取[one][two]个元素的值就可以这样
*( pa + one * two );
}

Clothos 2004-11-21
  • 打赏
  • 举报
回复
我把完整的代码贴上来吧?请帮忙改改!就针对二维数组传参部分!
#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;
}
Clothos 2004-11-21
  • 打赏
  • 举报
回复
感谢楼上的朋友,不过我想实现的是动态的,就是没有规定维的大小的。因为二维数组传参要给出第二维大小,但我是动态就不能给,怎么实现?
spider_xm 2004-11-21
  • 打赏
  • 举报
回复
用一维的更容易操作一些,不必要用二维的吧。
Clothos 2004-11-21
  • 打赏
  • 举报
回复
顶,请求帮忙!
sugelade 2004-11-21
  • 打赏
  • 举报
回复
下面是函数,但是我不知道怎样把connect数组传进去,要可以修改connect的值的那种
void travel(int **matrix,int visited[],int i,int n) //这里写**matrix不行啊!
--------------------------------------------------------------------------------
没问题呀,我在DEV_C++上能编译通过,不知楼主用的是什么编译器?
yycec 2004-11-21
  • 打赏
  • 举报
回复
void fun(int **a, int m, int n)
{
for (int i = 0; i < m; i++)
{
for (int j = 0; j < n; j++)
{
a[i][j] = ..
...
}
260005065 2004-11-21
  • 打赏
  • 举报
回复
还是用结构体吧!
struct a
{
int **arr2;
int m,n;
};
iam500jun 2004-11-21
  • 打赏
  • 举报
回复
依我个人之见,我并不赞同使用二维动态数组。因为指针的调用太过于复杂。
取代的方法是申请一个一维数组。比如你要申请一个3x5的二维数组,可以申
请一个15的一维数组,使用的方法也不是象使用数组那样使用。如你要访问a[2][3],
则是*(申请的指针+2*第一维的维数+3);
还有一个方法就是使用结构体。此种方法较为简单。在此不给予祥述。

260005065 2004-11-20
  • 打赏
  • 举报
回复
一般来说:
int data[3][4] = {{1,2,3,4},{2,3,4,5},{5,6,7,8},{6,7,8,9}};
int total = sum(data,3);
形参为:
int sum(int (*ar)[4],int size)

int sun(int ar[][4],int size)
Clothos 2004-11-20
  • 打赏
  • 举报
回复
啊,求求高手帮忙啊!很关键的一步,请该出手时就出手吧!

15,440

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧