Infatti non ho fatto mica un vettore di interi, ho definito un nuovo tipo "graph" e poi ho allocato dinamicamente la matrice "a" di size n*n
il vettore di char l'ho semplicemente fatto per rappresentare le lettere dei nodi
#include <stdio.h>
#include <stdlib.h>
#define n 5
#define m 3
#include <string.h>
typedef int Graph;
Graph sotto(Graph a[][n],char nodi[],char sottonodi[]) ///ho provato a semplificare le cose copiando
{ /// il primo grafo dinamico in uno statico per gestire meglio gli indici
int i,j;
Graph *b;
b=(Graph*)calloc(m*m,sizeof(Graph));
for(i=0;i<m;i++)
{if(sottonodi[i]==nodi[i])
for(j=0;j<m;j++)
{
*(b+i*m+j)= a[i][j];
}
}
return b;
}
int main()
{
Graph *a;
char nodi[n];
a=(Graph*)calloc(n*n,sizeof(Graph));
short i,j,x;
for(i=0;i<n;i++)
{
printf("inserisci carattere %d nodo\n",i+1);
fflush(stdin);
scanf("%c",&nodi[i]);
}
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{if(j!=i){
printf("se %c e' connesso a %c digita 1 altrimenti 0\n",nodi[i],nodi[j]);
fflush(stdin);
scanf("%d",&x);
if(x==1)
*(a+j*n+i)=1;
else
*(a+j*n+i)=0;}
}
}
puts("visualizzazione matrice");
for(i=0;i<n;i++)
{
printf("%c: ",nodi[i]);
for(j=0;j<n;j++)
{
printf("[%d] ",*(a+j*n+i));
}puts("");
}
Graph c[n][n];
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
c[i][j]=*(a+j*n+i);
}
}
puts("visualizzo a statica:");
for(i=0;i<n;i++)
{printf("%c: ",nodi[i]);
for(j=0;j<n;j++)
{
printf("[%d] ",c[i][j]);
}puts("");
}
char sotton[m];
for(i=0;i<m;i++)
{
printf("inserisci %d nodo per costruire il sottografo\n",i+1);
fflush(stdin);
scanf("%c",&sotton[i]);
}
puts("visualizzo sottografo B");
Graph *b=sotto(c,nodi,sotton);
for(i=0;i<m;i++)
{
printf("%c: ",sotton[i]);
for(j=0;j<m;j++)
{
printf("[%d] ",*(b+j*m+i));
}puts("");
}
return 0;
}