Académique Documents
Professionnel Documents
Culture Documents
h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<windows.h>
void setcolor(unsigned short color)
{
HANDLE hcon = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(hcon,color);
}
_m_adiacenta=(int**)malloc(varfuri*sizeof(int*));
if(!_m_adiacenta)return 0;
for(i=0;i<varfuri;i++)
{
_m_adiacenta[i]=(int*)malloc(varfuri*sizeof(int));
if(!_m_adiacenta[i])return 0;
for(j=0;j<varfuri;j++) _m_adiacenta[i][j]=0;
}
_lista=(LISTA**)malloc(varfuri*sizeof(LISTA*));
if(!lista)return 0;
for(i=0;i<varfuri;i++)_lista[i]=NULL;
for(i=0;i<arcuri;i++)
{
for(j=0;j<varfuri;j++)
{
if(m_incidenta[i][j]==-1)source=j;
else if(m_incidenta[i][j]==1)dest=j;
else if(m_incidenta[i][j]==2)source=dest=j;
}
_m_adiacenta[source][dest]=1;
if(!_lista[source])
{
_lista[source]=(LISTA*)malloc(sizeof(LISTA));
pos=_lista[source];
}
else
{
pos=_lista[source];
while(pos->next) pos=pos->next;
pos->next=(LISTA*)malloc(sizeof(LISTA));
pos=pos->next;
}
pos->virf=dest+1;
pos->next=NULL;
}
*m_adiacenta=_m_adiacenta;
*lista=_lista;
return 1;
}
void student ()
{
printf("\n\n\nRealizat de Neonil Rosca Gr.C171\n\n\n");
}
_m_adiacenta=(int**)malloc(varfuri*sizeof(int*));
if(!_m_adiacenta)return 0;
for(i=0;i<varfuri;i++)
{
_m_adiacenta[i]=(int*)malloc(varfuri*sizeof(int));
if(!_m_adiacenta[i])return 0;
for(j=0;j<varfuri;j++) _m_adiacenta[i][j]=0;
}
for(i=0;i<varfuri;i++)
{
pos=lista[i];
while(pos)
{
_m_adiacenta[i][pos->virf-1]=1;
_arcuri++;
_m_incidenta=(int**)realloc(_m_incidenta,_arcuri*sizeof(int*));
if(!_m_incidenta)return 0;
_m_incidenta[_arcuri-1]=(int*)malloc(varfuri*sizeof(int));
if(!_m_incidenta[_arcuri-1])return 0;
for(j=0;j<varfuri;j++) _m_incidenta[_arcuri-1][j]=0;
if(i==pos->virf-1) _m_incidenta[_arcuri-1][i]=2;
else
{
_m_incidenta[_arcuri-1][i]=-1;
_m_incidenta[_arcuri-1][pos->virf-1]=1;
}
pos=pos->next;
}
}
*m_incidenta=_m_incidenta;
*arcuri=_arcuri;
*m_adiacenta=_m_adiacenta;
return 1;
}
for(i=0;i<varfuri;i++)
for(j=0;j<varfuri;j++)
if(m_adiacenta[i][j]==1)_arcuri++;
_m_incidenta=(int**)malloc(_arcuri*sizeof(int*));
if(!_m_incidenta)return 0;
for(i=0;i<_arcuri;i++)
{
_m_incidenta[i]=(int*)malloc(varfuri*sizeof(int));
if(!_m_incidenta[i])return 0;
for(j=0;j<varfuri;j++) _m_incidenta[i][j]=0;
}
_lista=(LISTA**)malloc(varfuri*sizeof(LISTA*));
if(!lista)return 0;
for(i=0;i<varfuri;i++)
{
_lista[i]=NULL;
for(j=0;j<varfuri;j++)
{
if(m_adiacenta[i][j]==1)
{
if(i==j)_m_incidenta[ac][i]=2;
else
{
_m_incidenta[ac][i]=-1;
_m_incidenta[ac][j]=1;
}
ac++;
if(!_lista[i])
{
_lista[i]=(LISTA*)malloc(sizeof(LISTA));
pos=_lista[i];
}
else
{
pos->next=(LISTA*)malloc(sizeof(LISTA));
pos=pos->next;
}
pos->virf=j+1;
pos->next=NULL;
}
}
}
*m_incidenta=_m_incidenta;
*arcuri=_arcuri;
*lista=_lista;
return 1;
}
int main()
{
int **m_incidenta=NULL, **m_adiacenta=NULL;
int i, j, buf, x, y, option, varfuri, arcuri, source, dest;
LISTA **lista=NULL, *pos=NULL,*next=NULL;
char s[100],*ptr;
while (1)
{
system("cls");
setcolor(2);
printf("\n\n\n\t\t ++++++++++++++++MENIU++++++++++++++++");
printf ("\n\t _________________________________________________________");
printf("\n\n\
Introducerea grafului prin intermediul: \n\n\
� 1.Matricii de adiacenta �\n\
� 2.Matricii de incidenta �\n\
� 3.Listei de adiacenta �\n\n");
printf("\n\n\
Afisarea grafului prin intermediul: \n\n\
� 4.Matricii de adiacenta �\n\
� 5.Matricii de incidenta �\n\
� 6.Listei de adiacenta �\n\n");
printf("\n\n\
� �\n\
� 0.Iesire �\n\
������������������������������������������������
�����ͼ\n");
setcolor(3);
printf("\n Alegeti comanda>>> ");
scanf("%d",&option);
switch (option)
{
case 1:
system("cls");
setcolor(3);
if(m_adiacenta!=NULL) puts(" Erorare !!! : Memoria este ocupata.");
else
{ setcolor(3);
printf(" Numarul de varfuri al grafului: ");
scanf("%d",&varfuri);
m_adiacenta=(int**)malloc(varfuri*sizeof(int*));
if(!m_adiacenta)exit(1);
for(i=0;i<varfuri;i++)
{
m_adiacenta[i]=(int*)malloc(varfuri*sizeof(int));
if(!m_adiacenta[i])exit(1);
}
setcolor(3);
puts("\n Itroduceti elementele matricii de adiacenta:\n");
printf(" ");
for(i=0;i<varfuri;i++)
{
printf(" X%d",i+1);
}
printf("\n");
for(i=0;i<varfuri;i++)
{
printf("X%d",i+1);
printf(" ");
for(j=0;j<varfuri;j++)
{
case 2:
system("cls");
if(m_incidenta!=NULL)
{ setcolor(12);
puts(" Erorare !!!: Memorie ocupata.");
getch();
}
else
{
setcolor(3);
printf(" Numarul de varfuri ale grafului: ");
scanf("%d",&varfuri);
printf(" Numarul de arcuri ale grafului : ");
scanf("%d",&arcuri);
m_incidenta=(int**)malloc(arcuri*sizeof(int*));
if(!m_incidenta)exit(1);
for(i=0;i<arcuri;i++)
{
m_incidenta[i]=(int*)malloc(varfuri*sizeof(int));
if(!m_incidenta[i])exit(1);
}
for(i=0;i<arcuri;i++)
{
setcolor(3);
printf("\n Muchia %d:\n",i+1);
setcolor(10);
printf(" Originea :\n");
scanf("%d",&source);
setcolor(10);
printf("Destinatia:\n");
scanf("%d",&dest);
case 3:
system("cls");
if(lista!=NULL)
{ setcolor(12);
puts(" Erorare: Memorie ocupata.");
getch();
}
else
{
printf(" Numarul de varfuri a grafului: ");
scanf("%d",&varfuri);
lista=(LISTA**)malloc(varfuri*sizeof(LISTA*));
if(!lista)exit(1);
for(i=0;i<varfuri;i++)
{
printf(" Introduceti prin virgula elementele adiacente virfului %d:
",i+1);
fflush(stdin);
gets(s);
pos=lista[i]=NULL;
if( (ptr=strtok(s,",")) )
{
buf=atoi(ptr);
if(buf>0 && buf<=varfuri)
{
lista[i]=(LISTA*)malloc(sizeof(LISTA));
if(!lista[i]) exit(1);
pos=lista[i];
pos->next=NULL;
pos->virf=buf;
}
while( (ptr=strtok(NULL,",")) )
{
buf=atoi(ptr);
if(buf>0 && buf<=varfuri)
{
if(!lista[i])
{
lista[i]=(LISTA*)malloc(sizeof(LISTA));
if(!lista[i]) exit(1);
pos=lista[i];
pos->next=NULL;
pos->virf=buf;
}
else
{
pos->next=(LISTA*)malloc(sizeof(LISTA));
if(!pos->next) exit(1);
pos=pos->next;
pos->virf=buf;
pos->next=NULL;
}
}
}
}
}
}
if(!
din_lista(&m_adiacenta,&m_incidenta,lista,varfuri,&arcuri))
{
puts("\n Eroare !!!: Conversie esuata!");
getch();
}
break;
case 4:
system("cls");
if(!m_adiacenta)
printf(" ");
for (i=0;i<varfuri;i++)
{
printf(" X%d",i+1);
}
for(i=0;i<varfuri;i++)
{
printf("\n");
printf("X%d ",i+1);
for(j=0;j<varfuri;j++)
{
printf(" %d ",m_adiacenta[i][j]);
}
}
}
getch();
break;
case 5:
system("cls");
if(!m_incidenta)
printf(" ");
for (i=0;i<varfuri;i++)
{
printf(" X%d",i+1);
}
printf("\n");
for(i=0;i<arcuri;i++)
{
printf("E(%d)",i+1);
for(j=0;j<varfuri;j++)
{
}
printf("\n");
} }
getch();
break;
case 6:
system("cls");
for(i=0;i<varfuri;i++)
{
printf(" %d:",i+1);
pos=lista[i];
while(pos)
{
printf(" %d,",pos->virf);
pos=pos->next;
}
printf(" 0\n");
}
}
getch();
break;
case 7:
system("cls");
if(m_incidenta!=NULL)
{
for(i=0;i<arcuri;i++) free(m_incidenta[i]);
free(m_incidenta);
m_incidenta=NULL;
}
if(m_adiacenta!=NULL)
{
for(i=0;i<varfuri;i++) free(m_adiacenta[i]);
free(m_adiacenta);
m_adiacenta=NULL;
}
if(lista!=NULL)
{
for(i=0;i<varfuri;i++)
{
pos=lista[i]->next;
free(lista[i]);
while(pos)
{
next=pos->next;
free(pos);
pos=next;
}
}
free(lista);
lista=NULL;
} setcolor(12);
puts(" Graful a fost sters din memoria calculatorului");
getch();
break;
case 1999:
system("cls");
student ();
system ("pause");
break;
case 0:
system("cls");
return 0;
default:
puts("Ati introdus o comanda inexistenta!");
getch();
}
}