我安装的是VS2008,前段时间做QM算法的程序,同学做好的程序在我的电脑上可以编译通过,但是运行到一半却会出现错误提示,求教各位大神看看是怎么回事
算法如下:
#include <iostream>
#include <cmath>
#include <cstdlib>
#include <vector>
using namespace std;
bool comp(int n,char* a,char* b)
{
for(int i=0;i<n;i++)
{
if(a[i]!=b[i] && (a[i]!='-'&&b[i]!='-'))return false;
}
return true;
}
int find(int n,char* a,char* b)
{
int count=0,tmp;
for(int i=0; i<n; i++)
{
if(a[i]!=b[i])
{
count++;
tmp=i;
}
}
if(count==1)return tmp;
else return -1;
}
bool contain(int n,char* a,char* b)
{
for(int i=0; i<n; i++)
{
if(a[i]!=b[i] && (a[i]!='-'))return false;
}
return true;
}
void transf(int tmp,int n,char *temp)
{
for(int i=n-1;i>=0;i--)
{
if(tmp%2)temp[i]='1';
else temp[i]='0';
tmp/=2;
}
}
int main()
{
int i,j,k,l,n,a,b,count,tmp;
char *temp;
vector<char*> v[10];
vector<char*> relative,prime,result;
bool flag[2];
cout<<"输入变量数n:"<<endl;
cin>>n;
cout<<"输入最小项数目m1:"<<endl;
cin>>a;
cout<<"输入最小项编号列表a1:"<<endl;
for(i=1;i<=a;i++)
{
cin>>tmp;
temp=new char[n];
transf(tmp,n,temp);
v[0].push_back(new char[n]);
relative.push_back(new char[n]);
strcpy(v[0].back(),temp);
strcpy(relative.back(),temp);
}
cout<<"输入无关项数目m2:"<<endl;
cin>>b;
cout<<"输入无关项编号列表a2:"<<endl;
for(i=1;i<=b;i++)
{
cin>>tmp;
transf(tmp,n,temp);
v[0].push_back(new char[n]);
strcpy(v[0].back(),temp);
}
for(i=0;i<10;i++)
{
if(v[i].empty())break;
for(j=0;j<(int)v[i].size();j++)
{
flag[0]=false;
for(k=0;k<(int)v[i].size();k++)
{
if(find(n,v[i][j],v[i][k])!=-1)
{
strcpy(temp,v[i][j]);
temp[find(n,v[i][j],v[i][k])]='-';
flag[1]=true;
flag[0]=true;
for(l=0;l<(int)v[i+1].size();l++)
{
if(!strcmp(v[i+1][l],temp))flag[1]=false;
}
if(flag[1])
{
v[i+1].push_back(new char[n]);
strcpy(v[i+1].back(),temp);
}
}
}
if(!flag[0])
{
prime.push_back(new char[n]);
strcpy(prime.back(),v[i][j]);
}
}
}
for(i=0;i<(int)relative.size()&&!relative.empty();i++)
{
count=0;
for(j=0;j<(int)prime.size()&&!prime.empty();j++)
{
if(comp(n,relative[i],prime[j]))
{
count++;
tmp=j;
}
}
if(count==1)
{
result.push_back(new char[n]);
strcpy(result.back(),prime[tmp]);
for(j=0;j<(int)relative.size();j++)
{
if(comp(n,relative[j],prime[tmp]))
{
relative.erase(relative.begin()+j);
j--;
}
}
prime.erase(prime.begin()+tmp);
i--;
}
}
while(!relative.empty())
{
strcpy(temp,prime.back());
prime.pop_back();
count=0;
for(i=0;i<(int)relative.size();i++)
{
if(comp(n,relative[i],temp))
{
relative.erase(relative.begin()+i);
i--;
count++;
}
}
if(count>0)
{
result.push_back(new char[n]);
strcpy(result.back(),temp);
}
}
while(!result.empty())
{
for(i=0;i<n;i++)
cout<<*(result.back()+i);
cout<<",";
result.pop_back();
}
cout<<endl;
return 0;
}
运行时出现;
