本文整理汇总了C++中OBBond::GetNbrAtomIdx方法的典型用法代码示例。如果您正苦于以下问题:C++ OBBond::GetNbrAtomIdx方法的具体用法?C++ OBBond::GetNbrAtomIdx怎么用?C++ OBBond::GetNbrAtomIdx使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类OBBond
的用法示例。
在下文中一共展示了OBBond::GetNbrAtomIdx方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: GetDFFVector
bool GetDFFVector(OBMol &mol,vector<int> &dffv,OBBitVec &bv)
{
dffv.clear();
dffv.resize(mol.NumAtoms());
int dffcount,natom;
OBBitVec used,curr,next;
OBAtom *atom,*atom1;
OBBond *bond;
vector<OBAtom*>::iterator i;
vector<OBBond*>::iterator j;
next.Clear();
for (atom = mol.BeginAtom(i);atom;atom = mol.NextAtom(i))
{
if (bv[atom->GetIdx()])
{
dffv[atom->GetIdx()-1] = 0;
continue;
}
dffcount = 0;
used.Clear();
curr.Clear();
used.SetBitOn(atom->GetIdx());
curr.SetBitOn(atom->GetIdx());
while (!curr.IsEmpty() && (bv&curr).Empty())
{
next.Clear();
for (natom = curr.NextBit(-1);natom != curr.EndBit();natom = curr.NextBit(natom))
{
atom1 = mol.GetAtom(natom);
for (bond = atom1->BeginBond(j);bond;bond = atom1->NextBond(j))
if (!used.BitIsOn(bond->GetNbrAtomIdx(atom1)) &&
!curr.BitIsOn(bond->GetNbrAtomIdx(atom1)))
if (!(bond->GetNbrAtom(atom1))->IsHydrogen())
next.SetBitOn(bond->GetNbrAtomIdx(atom1));
}
used |= next;
curr = next;
dffcount++;
}
dffv[atom->GetIdx()-1] = dffcount;
}
return(true);
}
示例2: FindRings
static void FindRings(OBMol &mol,vector<int> &path,OBBitVec &avisit,
OBBitVec &bvisit, int natom,int depth )
{
OBAtom *atom;
OBBond *bond;
vector<OBBond*>::iterator k;
// don't return if all atoms are visited
// (For example, some atoms are in multiple rings!) -GRH
if (avisit[natom])
{
int j = depth-1;
bond=mol.GetBond(path[j--]);
bond->SetInRing();
while( j >= 0 )
{
bond=mol.GetBond(path[j--]);
bond->SetInRing();
(bond->GetBeginAtom())->SetInRing();
(bond->GetEndAtom())->SetInRing();
if(bond->GetBeginAtomIdx()==static_cast<unsigned int>(natom) || bond->
GetEndAtomIdx()==static_cast<unsigned int>(natom))
break;
}
}
else
{
avisit.SetBitOn(natom);
atom = mol.GetAtom(natom);
for(bond = atom->BeginBond(k);bond;bond=atom->NextBond(k))
if( !bvisit[bond->GetIdx()])
{
path[depth] = bond->GetIdx();
bvisit.SetBitOn(bond->GetIdx());
FindRings(mol,path,avisit,bvisit,bond->GetNbrAtomIdx(atom),
depth+1);
}
}
}