Добавил:
Upload
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:16_II / опорные точки графа
.cpp# 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];
}
Соседние файлы в папке 16_II