Professional Documents
Culture Documents
#include <stdio.h>
#include <iostream>
#include <stdlib.h>
#include <conio.h>
using namespace std;
#define MAX 30
struct TOP
{
int clr; // Mau to cua 1 dinh
int unused_clr[MAX]; // Danh sach cac mau ko dc phep to cua 1 dinh
int clr_count; // Dem so mau ko dc phep to cua 1 dinh
};
struct GRAPH
{
int n; // So dinh cua Do thi G
int a[MAX][MAX]; // Ma Tran lien ket cua G
int used_clr[MAX]; // Danh sach cac mau da duoc dung
int clr_count; // So luong cac mau da dung
TOP top[MAX];
};
int MaxTop(GRAPH G)
{
int tonghang=0,b[MAX],i,j,max=0;
for(i=0;i<G.n;i++){
for(j=0;j<G.n;j++)
tonghang=tonghang+G.a[i][j];
b[i]=tonghang;
tonghang=0;
if(max<=b[i]){
max=b[i];
}
}
for(int k=0;k<G.n;k++)
if(b[k]==max && G.top[k].clr==-1) // Lay cac dinh co bac max va
chua dc to
return k;
}
Start(G);
// To mau ban dau cho 1 dinh
for(int i=0;i<G.n;i++){
max=MaxTop(G);
// Thu to bang nhung mau da to
do {
G.top[max].clr=j;
if(Same_color(j,max,G)) // Neu trung mau voi
nhung dinh khac va het mau co the to
flag=0;
else {
flag=1;
break;
}
}
while(G.used_clr[++j]!=0);
// To bang mau moi va danh dau mau moi la da dc to
if(flag==0) { // Dam bao chua sot mau nao
G.used_clr[++G.clr_count]=1;
G.top[max].clr=G.clr_count;
}
Del_Edge(max,G);
j=0;
}}
void Print_ColoredTop(GRAPH G){
for(int i=0;i<G.n;i++)
cout<<"\nDinh "<<i<<" mau : "<<G.top[i].clr;
}
void main()
{
GRAPH G;
ReadGraph(G,"C:\\matran_1.txt");
PrintGraph(G);
Coloring(G);
Print_ColoredTop(G);
getch();
}
#include <stdio.h>
#include <iostream.h>
#include <conio.h>
#define MAX 100
struct MAY
{
int cv[MAX];
int t_time;
};
int chonviec(int *a,int n);
int chonmay(MAY *may,int m);
main()
{ MAY may[MAX];
int n,m,time[MAX];
cout<<"Nhap vao so may m="; cin>>m;
cout<<"Nhap vao so cong viec n=";cin>>n;
cout<<"Nhap vao thoi gian lam tung cong viec : ";
for(int i=0;i<n;i++)
{ cout<<"\nn["<<i<<"]=";
cin>>time[i];}
phancong(may,time,n,m);
cout<<"------------Ket qua--------------\n";
for(i=0;i<m;i++)
{cout<<"May "<<i<<": ";
for(int j=0;j<MAX;j++)
if(may[i].cv[j]!=0)
cout<<may[i].cv[j]<<" ";
cout<<"\nTong thoi gian lam viec : "<<may[i].t_time<<endl;
}
getch();
}
#include <iostream>
#include <conio.h>
#include "stack.cpp"
#define MAX 12
using namespace std;
struct MANG_CON {
int pt[MAX]; /// Luu cac mang con
}mc[MAX];
struct BO {
int a[MAX]; /// Tra ve cac bo khong dc trung
int duyet[MAX]; /// Co danh dau dinh
int dem; /// Dem so dinh da dc danh dau trong 1 bo
int sodinh; /// Luu tong so dinh trong 1 bo
}bo[MAX];
for(int i=0;i<mt.dinh;i++){
cout<<"\n";
for(int j=0;j<mt.dinh;j++)
cout<<mt.a[i][j]<<" ";
}
}
int ss(stack s,BO bo[],int vt){ /// So sanh cac phan tu trong mang a
va cac bo
int val;
int i,j,sum[MAX];
for(i=0;i<MAX;i++){
for(j=0;j<MAX;j++){
if(s.e[vt]>=0 && s.e[vt]==bo[i].a[j]){
bo[i].duyet[j]=1;
bo[i].dem++;
}
}
}
i=0;
do{
if(bo[i].dem==bo[i].sodinh) /// bien dem tam thoi cac dinh
trung trong cac bo khac nhau
val=false;
else
val=true;
}
while(bo[++i].sodinh!=0);
return val;
}
void reset(BO b[]){ /// reset ve mac dinh cua Bo
for(int i=0;i<MAX;i++){
for(int j=0;j<MAX;j++)
bo[i].duyet[j]=0; // reset cac dinh nam trong bo thanh chua
duyet
bo[i].dem=0; // reset bien dem so phan tu da duyet cua
cac bo ve 0
}
}
void huy_dinh(MTLK &mt,int t){
for(int j=0;j<mt.dinh;j++){
mt.a[t][j]=0;
mt.a[j][t]=0;
}
}
void chuyen(stack s,MANG_CON mc[],int t){
int x,i=0;
while(!empty_stack(s)) {
pop(s,x);
mc[t].pt[i++]=x;
}
}
void laplich(BO bo[],MTLK &mt,MANG_CON mc[]) {
int v=0,t=0,temp,start=0;
stack s;
create_stack(s);
//push(s,start);
while(v<=mt.dinh) {
for(int i=0;i<MAX;i++){ /// lay dinh 0 truoc
for(int j=1;j<MAX;j++){
if(mt.a[i][j]==1 && mt.a[j][i]==1 && mt.duyet[i]==0){
/// lay 1 dinh bat ky co lk va chua duyet
push(s,i); /// bo vao stack
if(!ss(s,bo,i)) /// Neu dinh vua them vao
stack la ko dc phep
pop(s,temp); /// pop dinh do ra
else
{
v++; /// neu hop le thi tang so dinh len
mt.duyet[i]=1; /// dong thoi danh dau dinh
do da duyet => huy dinh
huy_dinh(mt,i);
break;
}}
}
}
if(!empty_stack(s)){ /// sau vong lap neu stack ko rong thi chuyen du lieu
tu stack sang mang con
chuyen(s,mc,t);
create_stack(s); /// Khoi tao lai stack
}
reset(bo); /// khoi tao lai cac bo
}}
void main()
{
tao_mtlk(mt);
tao_bo(bo);
xuat_mt(mt);
laplich(bo,mt,mc);
getch();
}
#include <stdio.h>
#include <iostream.h>
#include <stdlib.h>
#include <conio.h>
#define MAX 20
#define MAXINT 32000
struct GRAPH
{
int n; // So dinh cua Do thi G
int a[MAX][MAX]; // Ma Tran lien ket cua G
int visited[MAX];
};
/////////////// Doc Ma Tran lien ket tu File /////////////////
void ReadGraph(GRAPH &G, char *path)
{
/// Mo file
FILE *pFile = fopen(path,"rt");
if(pFile ==NULL)
{exit(0);}
else
{
fscanf(pFile,"%d",&G.n); // Doc dinh
for(int i=0;i<G.n;i++) // Doc Ma Tran lien ket tu file
for(int j=0;j<G.n;j++)
fscanf(pFile,"%d",&G.a[i][j]);
}
fclose(pFile);
}
for(j=0;j<G.n;j++)
if(G.visited[j]==0) { // Dinh chua
duyet
}
T.a[imin][jmin]=1; T.a[jmin][imin]=1; //Gan vi tri cac diem
vao cay bao trum nho nhat
G.visited[jmin] = 1;
n++;
}
void PrintGraphByEdge(GRAPH T)
{
for(int i=0;i<T.n;i++)
for(int j=i+1;j<T.n;j++)
if(T.a[i][j]!=0)
cout<<"\n"<<i<<" -> "<<j<<flush;
}
main()
{ GRAPH G, T;
ReadGraph(G,"c:\\Kruskal3.txt");
PrintGraph(G);
prim(G,T);
PrintGraph(T);
PrintGraphByEdge(T);
getch();
}