void CPlainTextEditor::SelectRight(void) { BeginSelection(); miEditPos = FindRight(miEditPos); EndSelection(); ResetUpDown(); }
int main(){ while(scanf("%d",&Gophere)!=EOF){ scanf("%d%d%d",&Hole,&Time,&V); double maxDistance_pow2 = Time * V * Time * V; for(int i = 0;i < Gophere;++i){ scanf("%lf%lf",&gophere[i].x,&gophere[i].y); } for(int i = 0;i < Hole;++i){ scanf("%lf%lf",&hole[i].x,&hole[i].y); } for(int i = 0;i < Gophere;++i){ for(int j = 0;j < Hole;++j){ if( pow(hole[j].x - gophere[i].x,2) + pow(hole[j].y - gophere[i].y,2) <= maxDistance_pow2 ) edge[i][j] = 1; else edge[i][j] = 0; } } int result = Gophere; memset(hLink,-1,sizeof(hLink)); memset(&No,-1,sizeof(No)); for(int i = 0;i < Gophere;++i){ memset(pass,0,sizeof(pass)); if(FindRight(i)) --result; } printf("%d\n",result); } return 0; }
bool FindRight(int Left){ for(int r = 0;r < Hole;++r){ if( edge[Left][r] && !pass[r] ){ pass[r] = 1; if(hLink[r] == No || FindRight(hLink[r])){ hLink[r] = Left; return true; } } } return false; }
void BlockLocalizer::Run() { FindUp(); if (uppoints.size() < 5) { return; } #ifdef BL_OUTPUT_DEBUG_INFO FindLeft(); FindRight(); #else thread t1 = thread(std::mem_fn(&BlockLocalizer::FindLeft), this); thread t2 = thread(std::mem_fn(&BlockLocalizer::FindRight), this); t1.join(); t2.join(); #endif if (leftpoints.size() < 5 || rightpoints.size() < 5) { return; } FindDown(); if (downpoints.size() < 5) { return; } NotFoundBlockFlag = false; Judgement(); p_block->Lines2ABCD(); #ifdef BL_OUTPUT_DEBUG_INFO cv::line(drowDebugResult, cv::Point(0, (*p_block).UpLine.k * (0 - (*p_block).UpLine.x0) + (*p_block).UpLine.y0), cv::Point(drowDebugResult.cols, (*p_block).UpLine.k * (drowDebugResult.cols - (*p_block).UpLine.x0) + (*p_block).UpLine.y0), cv::Scalar(0, 0, 255), 1); cv::line(drowDebugResult, cv::Point(0, (*p_block).DownLine.k * (0 - (*p_block).DownLine.x0) + (*p_block).DownLine.y0), cv::Point(drowDebugResult.cols, (*p_block).DownLine.k * (drowDebugResult.cols - (*p_block).DownLine.x0) + (*p_block).DownLine.y0), cv::Scalar(0, 255, 255), 1); cv::line(drowDebugResult, cv::Point((drowDebugResult.rows - (*p_block).LeftLine.y0) / (*p_block).LeftLine.k + (*p_block).LeftLine.x0, drowDebugResult.rows), cv::Point((0 - (*p_block).LeftLine.y0) / (*p_block).LeftLine.k + (*p_block).LeftLine.x0, 0), cv::Scalar(0, 255, 0), 1); cv::line(drowDebugResult, cv::Point((drowDebugResult.rows - (*p_block).RightLine.y0) / (*p_block).RightLine.k + (*p_block).RightLine.x0, drowDebugResult.rows), cv::Point((0 - (*p_block).RightLine.y0) / (*p_block).RightLine.k + (*p_block).RightLine.x0, 0), cv::Scalar(255, 0, 0), 1); if (p_faults->BrokenEdges.size() > 0) { for (int i = 0; i < p_faults->BrokenEdges.size(); i++) { cv::circle(drowDebugResult, p_faults->BrokenEdges[i].position, p_faults->BrokenEdges[i].length / 2, cv::Scalar(0, 0, 255), 10); } } #endif }
void CPlainTextEditor::Right(void) { ClearSelection(); miEditPos = FindRight(miEditPos); ResetUpDown(); }