Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

16_II / опорные точки графа

.cpp
Скачиваний:
19
Добавлен:
10.02.2015
Размер:
1.46 Кб
Скачать
# include<iostream.h> 
# include<fstream.h>

ifstream in("graph.txt");

void input_matr(int **a, int n){
	for(int i=0; i<n; i++)
		for(int j=0; j<n; j++)
			cout<<"a["<<i<<"]["<<j<<"]=";
}


void upor(int *b, int *e, int n){
	int *c=new int [n+1];
	for(int i=0; i<n; i++)
		c[i]=b[i];
	c[n]=100;
	for( i=0; i<n; i++){
		int min=n;
		for(int j=0; j<n; j++)
			if(c[j]<=c[min])
				min=j;
			e[i]=min;
}}


bool uslovie_1(int i, int **a, bool *d, int n){
	bool flag=true;
	for(int j=0; j<n; j++)
		if((a[i][j])&&(d[j])){
			flag=false;
			break;
		}
		return flag;
}


bool uslovie_2(int i, int **a, bool *d, int n){
	bool flag=false;
	for(int y=0; y<n; y++){
		if((!d[y])&&(a[i][y])){
			flag=false;
			for(int j=0; j<n; j++)
				if((a[j][y])&&(j!=i)&&(d[j]))
					flag=false;
				if(flag) break;
		}
		else flag=false;
	}
	return flag;
}



void main(){
	int n;
	cout<<"Enter nubmer of versin:";
	cin>>n;
	int **matr=new int *[n];
	for(int i=0; i<n; i++)
		matr[i]=new int[n];
	bool *d=new bool[n];
	int *e=new int[n];
	int *a=new int[n];
	for( i=0; i<n; i++)
		e[i]=0;
	a[i]=0;
	input_matr(matr, n);
	for(i=0; i<n; i++)
		for(int j=0; j<n; j++)
			if(matr[i][j])
				a[i]++;
			upor(a,e,n);
			for(i=0; i<n; i++)
				d[i]=true;
			for(i=0; i<n; i++)
				if(!(uslovie_1(e[i],matr,d,n)||uslovie_2(e[i],matr,d,n)))
					d[e[i]]=0;
				for(i=0; i<n; i++)
					cout<<d[i];
}