+ -
当前位置:首页 → 问答吧 → void函数中人return的含义

void函数中人return的含义

时间:2011-12-08

来源:互联网

void Backtrack(int i)
{
if(i > n)
{
if(cw > bestw)
{
for(int j = 1;j <= n;j++)
bestx[j] = x[j];
bestw = cw;
}
return;
}
r = r-w[i];
if(cw+w[i]<=c)
{
x[i] = 1;
cw=cw+w[i];
Backtrack(i+1);
}
r = r+w[i];
}
这里我输入n的值为4,当执行return 之前i的值为四,执行完return语句之后i变为了2(i的初始值为1),求解释!

作者: hdk_1992   发布时间: 2011-12-08

return就是结束函数的执行返回调用该函数的地方继续往下执行代码的..

作者: duke56   发布时间: 2011-12-08

return ; 就是什么也没有返回~~

作者: zhutou100hao   发布时间: 2011-12-08

可能的问题
1.编译器优化引起
2.下标溢出引起
应该与return无关的

作者: keiy   发布时间: 2011-12-08

说的不清楚 请把整个的程序都贴出来

作者: haotiantoping   发布时间: 2011-12-08

结束此函数

作者: sun971782067   发布时间: 2011-12-08

引用 3 楼 keiy 的回复:

可能的问题
1.编译器优化引起
2.下标溢出引起
应该与return无关的

#include<iostream>
using namespace std;

//------------------------------------------------
class Loading
{
 friend float MaxLoading(float[],float,int);
 
 public:
  void Backtrack(int i);
  int n; //集装箱数
  int *x,*bestx; //当前解 当前最优解
  float *w,c,cw,bestw,r;//集装箱重量数组
//第一艘轮船的载重量,当前载重量,当前最优载重量,剩余集装箱重量
};
//-------------------------
float Maxloading(float w1[],float c1,float c2,int n1,int bestx1[])
{
 Loading k;
 int j;
 float MAXLoad;
 k.x= new int [n1+1];
 k.bestx=bestx1;
 k.w = w1;
 k.c = c1;
 k.n = n1;
 k.cw = 0;
 k.bestw = 0;
 k.r = 0;
 for(int i=1;i<=n1;i++)
  k.r+=w1[i];
 k.Backtrack(1);
 delete [] k.x;
 cout<<"船1最优装载:"<<k.bestw<<endl; 
 MAXLoad=k.bestw;
 for( j=1;j<=n1;j++)
 {
  if(k.bestx[j]==0)
  {
  MAXLoad+=w1[j];
  c2-=w1[j];
  if(c2<0)
  {
  cout<<"找不到合理装载方案!"<<endl;
  return -1;
  }
  }
  
 }
 cout<<"船1中的箱子:";
 for( j=1;j<=n1;j++)
  if(k.bestx[j]==1)
  cout<<j<<" ";
 cout<<endl;
 cout<<"船2中的箱子:";
 for( j=1;j<=n1;j++)
  if(k.bestx[j]==0)
  cout<<j<<" ";
 cout<<endl;
 return MAXLoad;
}

//----------------------------------------------------
void Loading::Backtrack(int i)
{
//搜索第i层
 if(i>n) // 到达叶结点
 {
  if(cw>bestw) /*更新最优解*/
  {
  for(int j=1;j<=n;j++)
  bestx[j]=x[j];
  bestw = cw;
  }
 
  return;
 }
 r-=w[i];
 if(cw+w[i]<=c)/*搜索左子树*/
 {
  x[i]=1;
  cw+=w[i];
  Backtrack(i+1);
  cw-=w[i];
 }
 if(cw+r>bestw)/*搜索右子数*/
 {
  x[i] = 0;
  Backtrack(i+1);
 }
 r+=w[i];
}

//---------------------------------------------
int main()
{
 float w[20];
 float c1,c2,k;
 int n,bestx[20];
 cout<<"输入箱子数:";
 cin>>n;
 cout<<"输入箱子重量:";
 for(int i=1;i<=n;i++)
  cin>>w[i];
 cout<<"输入容量船1,船2:";
 cin>>c1>>c2;
 k=Maxloading(w,c1,c2,n,bestx);
 if(k!=-1)cout<<"总体最优装载:"<<k<<endl;
 return 1;  
}

作者: hdk_1992   发布时间: 2011-12-08

return 是返回调用函数,继续执行下一句

设断点,跟踪看看

作者: AnYidan   发布时间: 2011-12-08