Алгоритм раскраски графа (точный) — страница 9

  • Просмотров 5797
  • Скачиваний 98
  • Размер файла 133
    Кб

(k==umnf[i][0]) umnf[j][0]=-1; } } //------------------------------------------------------------------------------------------ //------------------------------------------------------------------------------------------ void CKursovojDlg::prov(void) { int k; for (int i=1; i<colvo+1 ; i++) for (int j=1; j<colvo+1 ; j++) if (i!=j) { k=0; if ((umn[i].x1==umn[j].x1)&&(umn[i].x2==umn[j].x2)) umn[j].x1=-1; if ((umn[i].x2==umn[j].x1)&&(umn[i].x1==umn[j].x2)) umn[j].x1=-1; } } //------------------------------------------------------------------------------------------ //------------------------------------------------------------------------------------------ void CKursovojDlg::raskr(void) { const int rad=15; CClientDC dc(this); //Создать новое перо

CPen MyNewPen; MyNewPen.CreatePen(PS_SOLID, 1, RGB(0,0,0)); CBrush br; br.CreateSolidBrush(RGB(0,200,200)); //Выбрать перо CPen* pOriginalPen; CBrush* pbr; pOriginalPen=dc.SelectObject(&MyNewPen); pbr=dc.SelectObject(&br); //Нарисовать круг SetBkMode(dc,TRANSPARENT); int kp,nea; char buf[3]; int pr[1000]; int p=rat; rat++; if (rat==rav+1) {rask=-1; rat=1;} for (int i=0; i<1000 ; i++) if ((mass[i][0]>0)&&(mass[i][1]>0)) if (((i>rask)&&(p!=rat))||(rat==rav)) { pr[0]=0; p=rat; rask=i; for (int t=1; t<mass[i][0]+1 ; t++) { nea=0; for (int u=1; u<fff[mass[i][t]][0]+1; u++) if (fff[mass[i][t]][u]!=0) { kp=0; for (int y=1; y<pr[0]+1; y++) if (pr[y]==u) kp=1; if (kp==0) { pr[0]++; pr[pr[0]]=u; CRect

MyRectangle(versh[u].x-rad,versh[u].y-rad,versh[u].x+rad,versh[u].y+rad); dc.Ellipse(&MyRectangle); itoa(u,buf,10); if (u>9) dc.TextOut(versh[u].x-8,versh[u].y-8,buf); else dc.TextOut(versh[u].x-4,versh[u].y-8,buf);} } br.DeleteObject(); br.CreateSolidBrush(RGB(rand(),rand(),rand())); pbr=dc.SelectObject(&br); } } UpdateData(TRUE); m_l3.SetCurSel(m_l3.GetCount()-1-rav+rat); } //------------------------------------------------------------------------------------------ //------------------------------------------------------------------------------------------ void CKursovojDlg::k(void) { CString str; char ch[5]; for (int i=1; i<kolv+1 ; i++) for (int j=1; j<kolv+1 ; j++) if (matsm[i][j]==1) { if (i<j) { colvo++; umn[colvo].x1=i; umn[colvo].x2=j; } else {

colvo++; umn[colvo].x1=j; umn[colvo].x2=i; } } for ( i=1; i<1000 ; i++) for (int j=1; j<100 ; j++) mass[i][j]=0; prov(); str=""; m_l3.ResetContent(); int nea=0; for ( i=1; i<colvo+1 ; i++) if (umn[i].x1!=-1) { nea=1; str+="(x"; itoa(umn[i].x1,ch,10); str+=ch; str+="+x"; itoa(umn[i].x2,ch,10); str+=ch; str+=")"; if (str.GetLength()>40) {m_l3.AddString(str);str="";nea=0;} } if (nea!=0) m_l3.AddString(str); mass[0][0]=1; mass[1][0]=1; mass[0][1]=umn[1].x1; mass[1][1]=umn[1].x2; masskol=2; for ( i=2 ; i<colvo+1; i++) if (umn[i].x1>-1) perem(i); ud(); str=""; int kp=0; for ( i=0; i<1000 ; i++) if (mass[i][0]>0) { nea=1; if (kp>0) str+="+"; kp++; for (int j=1; j<mass[i][0]+1 ; j++) if

(mass[i][j]>0) {str+="x"; itoa(mass[i][j],ch,10); str+=ch;} if (str.GetLength()>40) {m_l3.AddString(str);str="";nea=0;} } if (nea!=0) m_l3.AddString(str); for ( i=1; i<1000 ; i++) for (int j=1; j<100 ; j++) fff[i][j]=0; m_l2.ResetContent(); colf=0; for ( i=0; i<1000 ; i++) if (mass[i][0]>0) { if (kolv!=mass[i][0]) { colf++; fff[colf][0]=0; for (int t=1; t<kolv+1 ; t++) { nea=0; for (int j=1; j<mass[i][0]+1 ; j++) if ((mass[i][j]>0)&&(mass[i][j]==t)) nea=1; if (nea==0) { fff[colf][0]++; fff[colf][fff[colf][0]]=1;} else { fff[colf][0]++; fff[colf][fff[colf][0]]=0;} } } } m_l2.ResetContent(); str=""; for ( i=1 ; i<fff[1][0]+1 ; i++) { for (int j=1 ; j<colf+1; j++) { itoa(fff[j][i],ch,10); str+=ch; str+="

"; } m_l2.AddString(str); str=""; } for ( i=1; i<1000 ; i++) for (int j=1; j<100 ; j++) mass[i][j]=0; for ( i=1; i<1000 ; i++) for (int j=1; j<100 ; j++) umnf[i][j]=0; for ( i=1; i<colf+1; i++) for (int j=1; j<fff[i][0]+1; j++) if (fff[i][j]!=0) {umnf[j][0]++; umnf[j][umnf[j][0]]=i;} provf(); str=""; for ( i=1 ; i<kolv+1 ; i++) if (umnf[i][0]>0) { nea=1; str+="("; kp=0; for (int j=1 ; j<umnf[i][0]+1 ; j++) { if (kp!=0) str+="+"; kp++; str+="F"; itoa(umnf[i][j],ch,10); str+=ch; } str+=")"; if (str.GetLength()>40) {m_l3.AddString(str);str="";nea=0;} } masskol=0; if (nea!=0) m_l3.AddString(str); for (int j=1 ; j<umnf[1][0]+1 ; j++) if (umnf[1][j]!=0) { mass[masskol][0]=1;