Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- typedef struct grafo
- {
- char *vertici;
- int *adj_M;
- int size_grafo;
- }T_Grafo;
- T_Grafo* sottografo(T_Grafo *x,char* sottoins,int size);
- int ric_seq(char *arr,int size,char key);
- int main()
- {
- T_Grafo *x,*y;
- int size=5,i,j,f=1,tmp_i,tmp_j,size_sottins=0;
- char key;
- char* sottoins;
- y=(T_Grafo*)malloc(sizeof(T_Grafo));
- y->vertici=malloc(size*sizeof(char*));
- sottoins=(char*)malloc(sizeof(char*));
- x=(T_Grafo*)malloc(sizeof(T_Grafo));
- x->vertici=malloc(size*sizeof(char*));
- x->size_grafo=size;
- printf("Carica i tuoi vertici: ");
- for(i=0;i<x->size_grafo;i++)
- {
- fflush(stdin);
- scanf("%c",&(*(x->vertici+i)));
- }
- x->adj_M=(int*)calloc(size*size,sizeof(int*));
- printf("\n\n");
- while(f!=0){
- printf("Inserisci archi al grafo ");
- printf("\n\n");
- for(i=0;i<size;i++)
- {
- printf("%c ",(*(x->vertici+i)));
- }
- printf("\nInserisci Da: "); fflush(stdin); scanf("%c",&key);
- tmp_i=ric_seq(x->vertici,size,key);
- printf("\nInserisci a: "); fflush(stdin); scanf("%c",&key);
- tmp_j=ric_seq(x->vertici,size,key);
- *(x->adj_M+tmp_j*size+tmp_i)=1;
- *(x->adj_M+tmp_i*size+tmp_j)=1;
- printf("\n\nper uscire scrivi 0: ");
- scanf("%d",&f);
- }
- for(i=0;i<size;i++)
- { printf("\n");
- for(j=0;j<size;j++)
- {
- printf("%d",(*(x->adj_M+size*j+i)));
- }
- }
- printf("\n\nInserisci il vertice iniziale del sottoinsieme: ");
- fflush(stdin);
- scanf("%c",&key);
- tmp_i=ric_seq(x->vertici,size,key);
- printf("\nInserisci il size del sottoinsieme: ");
- scanf("%d",&size_sottins);
- while(size_sottins>=(size-tmp_i))
- {
- printf("errore, inserisci un size <%d",size-tmp_i);
- scanf("%d",&size_sottins);
- }
- printf("\nl'indice e': %d\n",tmp_i);
- for(i=0;i<size_sottins;i++)
- {
- *(sottoins+i)=*(x->vertici+i+tmp_i);
- }
- printf("\nIl sottoinsieme e': ");
- for(i=0;i<size_sottins;i++)
- printf("%c ",*(sottoins+i));
- y=sottografo(x,sottoins,size_sottins);
- printf("\n\nIl sottografo y e': \n\n");
- for(i=0;i<size_sottins;i++)
- { printf("\n");
- for(j=0;j<size_sottins;j++)
- {
- printf("%d",(*(y->adj_M+size_sottins*j+i)));
- }
- }
- return 0;
- }
- T_Grafo* sottografo(T_Grafo *x,char* sottoins,int size)
- {
- int i,j,tmp_i,tmp_i2;
- T_Grafo *y;
- y=(T_Grafo*)malloc(sizeof(T_Grafo));
- y->vertici=malloc(size*sizeof(char*));
- y->size_grafo=size;
- for(i=0;i<size;i++)
- {
- *(y->vertici+i)=*(sottoins+i);
- }
- y->adj_M=(int*)calloc(size*size,sizeof(int));
- for(i=0;i<size;i++)
- { printf("\n");
- for(j=0;j<size;j++)
- {
- printf("%d",(*(y->adj_M+size*j+i)));
- }
- }
- printf("\n");
- for(i=0;i<size;i++)
- {
- tmp_i=ric_seq(x->vertici,x->size_grafo,*(sottoins+i));
- for(j=0;j<(x->size_grafo);j++)
- {
- if(*(x->adj_M+(x->size_grafo*j)+tmp_i)==1)
- {
- tmp_i2=ric_seq(sottoins,size,*(x->vertici+j));
- if(tmp_i2!=-1)
- *(y->adj_M+size*i+tmp_i2)=1;
- }
- }
- }
- return y;
- }
- int ric_seq(char *arr,int size,char key)
- {
- int i;
- for(i=0;i<size;i++)
- if(*(arr+i)==key)
- return i;
- return -1;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement