本文整理汇总了C++中VVI::clear方法的典型用法代码示例。如果您正苦于以下问题:C++ VVI::clear方法的具体用法?C++ VVI::clear怎么用?C++ VVI::clear使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类VVI
的用法示例。
在下文中一共展示了VVI::clear方法的6个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: CalcMatrix
void CalcMatrix(const vector<CompositeData> data, VVI & RM, VVI & DM,
VS & deci_val) {
if (data.size() == 0 ) {
cerr << "Input data is empty!" << endl;
exit(-1);
}
unsigned int i, j;
//Calc Relation Matrix
RM.clear();
VI vbTmp(data.size(), 0);
RM.insert(RM.begin(), data.size(), vbTmp);
for (i = 0; i < data.size(); ++i) {
for (j = 0; j < data.size(); ++j) {
if (data[i] == data[j])
RM[i][j] = 1;
}
RM[i][i] = 1;
}
//Calc Relation Matrix
STR2VI_MAP DMap;
STR2VI_MAP::iterator it;
for (i = 0; i < data.size(); ++i) {
it = DMap.find(data[i].d);
if (it == DMap.end()) {
VI tmp;
tmp.push_back(i);
DMap.insert(STR2VI_MAP::value_type(data[i].d, tmp));
} else {
((*it).second).push_back(i);
}
}
//DM: n * d
//DMap.size() = d
DM.clear();
VI viTmp(DMap.size(), 0);
DM.insert(DM.begin(), data.size(), viTmp);
// cout << DM.size() << "\t" << DM[0].size() << endl;
for (i = 0, it = DMap.begin(); it != DMap.end(); ++it, ++i) {
deci_val.push_back((*it).first);
for (j = 0; j < (*it).second.size(); ++j) {
DM[(*it).second[j]][i] = 1;
}
}
DMap.clear();
}
示例2: CalcOmegaMatrix
void CalcOmegaMatrix(const VVI & RM, const VVI & DM, VVI & OmegaM) {
if (RM.size() == 0 || DM.size() == 0) {
cerr << "Size of relation matrix and decison matrix is 0 !" << endl;
exit(-1);
}
//OmegaM: n * d
OmegaM.clear();
VI viTmp(DM[0].size(), 0);
OmegaM.insert(OmegaM.begin(), RM.size(), viTmp);
// cout << OmegaM.size() << "\t" << OmegaM[0].size() <<endl;
unsigned int i, j, k;
STR2VI_MAP::iterator it;
int sum = 0;
for (i = 0; i < RM.size(); ++i) {
for (j = 0; j < DM[0].size(); ++j) {
sum = 0;
for (k = 0; k < DM.size(); ++k) {
sum += RM[i][k] * DM[k][j];
}
OmegaM[i][j] = sum;
}
}
}
示例3: multi
bool multi(VVI & x, VVI & y, VVI & z) {
int mx = x.size();
int my = y.size();
if (mx == 0 || my == 0) return false;
int nx = x[0].size();
int ny = y[0].size();
if (nx == 0 || ny == 0) return false;
//cout << "mx: " << mx << endl;
//cout << "my: " << my << endl;
//cout << "nx: " << nx << endl;
//cout << "ny: " << ny << endl;
if (nx != my) return false;
z.clear();
for (int i = 0; i < mx; i++) {
z.push_back(VI(ny, 0));
for (int j = 0; j < ny; j++) {
double sum = 0;
for (int k = 0; k < my; k++) {
sum += (double)x[i][k] * (double)y[k][j];
}
if (sum > INT_MAX || sum < INT_MIN) return false;
z[i][j] = (int)sum;
}
}
return true;
}
示例4: buildBCC
void buildBCC () {
idx = VI(n, -1), low = VI(n);
cutVertices.clear();
bridges.clear();
st.clear();
components.clear();
totalComponents++;
for (int i = 0; i < n; i++) if (idx[i] == -1) {
DFS(make_pair(i, -1), 0);
}
}
示例5: add
bool add(VVI & x, VVI & y, VVI & z) {
int mx = x.size();
int my = y.size();
if (mx == 0 || my == 0) return false;
int nx = x[0].size();
int ny = y[0].size();
if (nx == 0 || ny == 0) return false;
//cout << "mx: " << mx << endl;
//cout << "my: " << my << endl;
//cout << "nx: " << nx << endl;
//cout << "ny: " << ny << endl;
if (mx != my || nx != ny) return false;
z.clear();
for (int i = 0; i < mx; i++) {
z.push_back(VI(nx, 0));
for (int j = 0; j < nx; j++) {
double tmp = (double)x[i][j] + (double)y[i][j];
if (tmp > INT_MAX || tmp < INT_MIN) return false;
z[i][j] = (int)tmp;
}
}
return true;
}
示例6: main
int main()
{
//omp_set_num_threads(4);
cout << "Scanning Started..." << endl;
scanf("%d %d %d %d %d",&n,&m,&s,&D,&t);
rootN = 0; while(rootN*rootN<n) rootN++;
tmp.clear(); tmp.resize(n);
for(int i=0; i<m; i++)
{
int u,v; scanf("%d %d",&u,&v); u--; v--;
G[u].PB(v);
tmp[u].PB(v);
}
for(int i=0; i<s; i++)
{
int x; scanf("%d",&x); x--;
S.PB(x);
}
cout << "Scanning done" << endl;
//test_recursive();
double start = omp_get_wtime();
VVI ans;
if(D <= t && D <= rootN) {
cout << "Case 1 : D <= t and D <= root" << endl;
B2::solve(G,n,m,s,D,S,ans);
}
else if(t >= rootN) {
cout << "Case 2 : t >= sqrt(N)" << endl;
R1::solve(n,m,s,D,S,G,ans,rootN);
}
else if(s >= ceil(n/t)) {
cout << "Case 3 : s >= ceil(n / t)" << endl;
R2::solve(n,m,s,D,S,G,ans,ceil(n/t));
}
else if(D <= t*t) {
cout << "Case 4 : D <= t*t" << endl;
R3::solve(n,m,s,D,S,G,ans,ceil(n/t));
}
else {
cout << "Case 5 : Else" << endl;
R3::solve(n,m,s,D,S,G,ans,ceil(n/t),1,ceil(n/(t*t)));
}
double end = omp_get_wtime();
printf("N = %d, E = %d, S = %d, D = %d\n",n,m,s,D);
if(n <= brute_max)
{
cout << "Starting Bruteforce..." << endl;
VVI dist(n,VI(n,0));
for(int i=0; i<n; i++)
{
dist[i][i] = 1;
for(auto v:tmp[i])
dist[i][v] = 1;
}
//print(dist);
double start_brute = get_cpu_time();
int brute_cnt = transitive_closure(dist,n);
double end_brute = get_cpu_time();
int cnt = 0;
for(int i=0; i<SZ(S); i++) cnt += SZ(ans[S[i]]);
double acc = (cnt*1.0)/brute_cnt; acc *= 100;
printf("\nAccuracy: %lf\n",acc);
printf("Brute Time: %lf\n",end_brute - start_brute);
//print(dist);
/*
for(int i=0; i<n; i++)
for(auto v:ans[i])
assert(dist[i][v]==1);
*/
cout << "Bruteforce done" << endl;
}
printf("Time: %lf\n",end-start);
//printf("Graph:\n");
//print(tmp);
//printf("Transitive Closure:\n");
//print(ans);
return 0;
}