类约瑟夫环问题

来源:互联网 发布:950x250淘宝轮播图 编辑:程序博客网 时间:2024/06/03 01:05

int CPMFKaisakiEditMain::CalAllKirinukiGroup(
            std::vector<CURVE> AllKirinukiCrv,        // [I/ ]
            std::vector<struEname> AllKirinukiAds,       // [I/ ]
            std::vector< std::vector<CURVE> > &GropuKirinukiCrv,   // [ /O]
            std::vector< std::vector<struEname> > &GroupKirinukiAds  // [ /O]
)
/**/
{
 std::vector<CURVE> tem;  //save one closed graph
 std::vector<struEname> temEname;
 VECTOR BeginVector;   //beginpoint of one closed graph
 VECTOR TemVector;   //next point of the closed graph
 int i = 0;
 vector<CURVE>::iterator itDel;
 vector<struEname>::iterator itDel2;
 int crvtype;
 
 //case of circle

 for(i=0; i<AllKirinukiCrv.size(); i++)
 {  
  geo_SengataGet(&AllKirinukiCrv[i], &crvtype);
  if(GEO_EN == crvtype)
  {
   tem.push_back(AllKirinukiCrv[i]);
   temEname.push_back(AllKirinukiAds[i]);
   GropuKirinukiCrv.push_back(tem);
   GroupKirinukiAds.push_back(temEname);
   itDel = AllKirinukiCrv.begin()+i;
   AllKirinukiCrv.erase(itDel);
   itDel2 = AllKirinukiAds.begin()+i;
   AllKirinukiAds.erase(itDel2);
  }
 }
 
 while(!AllKirinukiCrv.empty())
 {
  tem.push_back(AllKirinukiCrv[0]);
  temEname.push_back(AllKirinukiAds[0]);
  ///////
  geo_SengataGet(&AllKirinukiCrv[0], &crvtype);
  if(GEO_SENBUN == crvtype)
  {
   GEO_VEC_COPY(&AllKirinukiCrv[0].line.pnt1,&BeginVector);
   GEO_VEC_COPY(&AllKirinukiCrv[0].line.pnt2,&TemVector);
  }
  else if(GEO_ENKO == crvtype)
  {
   GEO_VEC_COPY(&AllKirinukiCrv[0].circle.pnt1,&BeginVector);
   GEO_VEC_COPY(&AllKirinukiCrv[0].circle.pnt2,&TemVector);
  }
  else
  {
   return 0;
  }
  
  itDel = AllKirinukiCrv.begin();     
        AllKirinukiCrv.erase(itDel);    
  itDel2 = AllKirinukiAds.begin();     
        AllKirinukiAds.erase(itDel2); 
  
  while(geo_TenTenIcchi(&TemVector,&BeginVector,1e-6,1e-6) == GEO_FALSE)
  {
   for(i=0; i<AllKirinukiCrv.size(); i++)
   {
    geo_SengataGet(&AllKirinukiCrv[i], &crvtype);
    if(GEO_SENBUN == crvtype)
    {
     if(geo_TenTenIcchi(&TemVector, &AllKirinukiCrv[i].line.pnt1,1e-6,1e-6) == GEO_TRUE)
     {
      GEO_VEC_COPY(&AllKirinukiCrv[i].line.pnt2, &TemVector);
      tem.push_back(AllKirinukiCrv[i]);
      temEname.push_back(AllKirinukiAds[i]);
      itDel = AllKirinukiCrv.begin()+i;
      AllKirinukiCrv.erase(itDel);
      itDel2 = AllKirinukiAds.begin()+i;
      AllKirinukiAds.erase(itDel2);
      break;
     }
     else if(geo_TenTenIcchi(&TemVector, &AllKirinukiCrv[i].line.pnt2,1e-6,1e-6) == GEO_TRUE)
     {
      GEO_VEC_COPY(&AllKirinukiCrv[i].line.pnt1, &TemVector);
      tem.push_back(AllKirinukiCrv[i]);
      temEname.push_back(AllKirinukiAds[i]);
      itDel = AllKirinukiCrv.begin()+i;
      AllKirinukiCrv.erase(itDel);
      itDel2 = AllKirinukiAds.begin()+i;
      AllKirinukiAds.erase(itDel2);
      break;
     }
     else
     {
      continue;
     }
    }
   else if(GEO_ENKO == crvtype)
   {    
    if(geo_TenTenIcchi(&TemVector, &AllKirinukiCrv[i].circle.pnt1,1e-6,1e-6) == GEO_TRUE)
    {
     GEO_VEC_COPY(&AllKirinukiCrv[i].circle.pnt2, &TemVector);
     tem.push_back(AllKirinukiCrv[i]);
     temEname.push_back(AllKirinukiAds[i]);
     itDel = AllKirinukiCrv.begin()+i;
     AllKirinukiCrv.erase(itDel);
     itDel2 = AllKirinukiAds.begin()+i;
     AllKirinukiAds.erase(itDel2);
     break;
    }
    else if(geo_TenTenIcchi(&TemVector, &AllKirinukiCrv[i].circle.pnt2,1e-6,1e-6) == GEO_TRUE)
    {
     GEO_VEC_COPY(&AllKirinukiCrv[i].circle.pnt1, &TemVector);
     tem.push_back(AllKirinukiCrv[i]);
     temEname.push_back(AllKirinukiAds[i]);
     itDel = AllKirinukiCrv.begin()+i;
     AllKirinukiCrv.erase(itDel);
     itDel2 = AllKirinukiAds.begin()+i;
     AllKirinukiAds.erase(itDel2);
     break;
    }
    else
    {
     continue;
    }
   }
   else
   {
    return 0;
   }
   }
   if(i == AllKirinukiCrv.size())
   {
    break;
   }
  } 
  GropuKirinukiCrv.push_back(tem);
  GroupKirinukiAds.push_back(temEname);
  tem.clear();
  temEname.clear();
 }
 
 return 0;
}

原创粉丝点击