BÀI TOÁN RỪNG HỆ SINH THÁI

 ÀI TOÁN RỪNG HỆ SINH THÁI



#include<stdio.h>
#define N 500
#define M 500
typedef struct{
	int A[N][M];
	int n,m;
}Graph;
typedef int ElementType;
typedef struct{
	ElementType data[100];
	int size;
}List;
void make_null(List *L ){
	L->size=0;
}
void push_list(List *L, ElementType x){
	L->data[L->size]=x;
	L->size++;
}
void init_graph(Graph *G, int n, int m){
	G->n=n;
	G->m=m;
	int i,j;
	for(i=1;i<=n;i++)
		for(j=1;j<=m;j++)
			G->A[i][j]=0;
}
void add_graph(Graph *G, int e, int x, int y){
	G->A[x][e]=1;
	G->A[y][e]=1;
}
int adjacent(Graph *G, int x, int y){
	int e;
	for(e=1;e<=G->m;e++){
		if(G->A[x][e]==1 && G->A[y][e]==1)
			return 1;
		}
		return 0;
}
int degree(Graph *G, int x){
	int e,deg=0;
	for(e=1;e<=G->m;e++){
		if(G->A[x][e]==1)
			deg++;
		}
		return deg;
}
List neightbors(Graph *G, int x){
	int i,j;
	List L;
	make_null(&L);
	for(i=1;i<=G->n;i++){
		for(j=1;j<=G->m;j++)
			if(x!=i)
				if(G->A[x][j]==1 && G->A[i][j]==1)
					push_list(&L,i);
	}
	return L;
}
int main(){
	Graph G;
	int i,j,n,m,e,u,v;
//	freopen("dt.txt","r",stdin);
	scanf("%d%d",&n,&m);
	init_graph(&G,n,m);
	for(e=1;e<=G.m;e++){
		scanf("%d%d",&u,&v);
		add_graph(&G,e,u,v);
	}
//	for(i=1;i<=n;i++){
//		for(j=1;j<=m;j++)
//			printf("%d ",G.A[i][j]);
//		printf("\n");
//		}
	List L1;
	List L2;
	int x,y;
	List L3;
	int dem=0;
	scanf("%d%d",&x,&y);
	L1=neightbors(&G,x);
	L2=neightbors(&G,y);
	for(i=0;i<L1.size;i++){
		for(j=0;j<L2.size;j++)
			if(L1.data[i]==L2.data[j]){
				dem++;
				push_list(&L3,L1.data[i]);
			}
	}
	if(dem==0){
		printf("KHONG CHUNG DOI THU");
	}else
	for(i=0;i<L3.size;i++){
		printf("%d ",L3.data[i]);
	}
	return 0;
}