Pagini recente » Cod sursa (job #2268104) | Cod sursa (job #2515189) | Cod sursa (job #869114) | Cod sursa (job #2613278) | Cod sursa (job #2364390)
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
typedef struct mylist
{
int number_of_neighbors;
int *neighbors;
}AdjacencyList;
void DFS(AdjacencyList *list,int index,bool **visited)
{
if(list[index].number_of_neighbors==0)
return;
for(int i=0;i<list[index].number_of_neighbors;i++)
if((*visited)[list[index].neighbors[i]]==false)
{
(*visited)[list[index].neighbors[i]]=true;
DFS(list,list[index].neighbors[i],visited);
}
}
int main()
{
FILE *read=fopen("dfs.in","r");
FILE *write=fopen("dfs.out","w");
int number_of_vertices;
int number_of_arcs;
fscanf(read,"%d %d",&number_of_vertices,&number_of_arcs);
bool*visited=calloc(number_of_vertices+1,sizeof(bool));
AdjacencyList *adjlist=calloc(number_of_vertices+1,sizeof(AdjacencyList));
int x,y;
for(int i=0;i<number_of_arcs;i++)
{
fscanf(read,"%d%d",&x,&y);
if(adjlist[x].number_of_neighbors==0)
{
adjlist[x].number_of_neighbors=1;
adjlist[x].neighbors=(int*)calloc(1,sizeof(int));
adjlist[x].neighbors[0]=y;
}
else
{
adjlist[x].number_of_neighbors++;
adjlist[x].neighbors=(int*)realloc(adjlist[x].neighbors,adjlist[x].number_of_neighbors*sizeof(int));
adjlist[x].neighbors[adjlist[x].number_of_neighbors-1]=y;
}
if(adjlist[y].number_of_neighbors==0)
{
adjlist[y].number_of_neighbors=1;
adjlist[y].neighbors=(int*)calloc(1,sizeof(int));
adjlist[y].neighbors[0]=x;
}
else
{
adjlist[y].number_of_neighbors++;
adjlist[y].neighbors=(int*)realloc(adjlist[y].neighbors,adjlist[y].number_of_neighbors*sizeof(int));
adjlist[y].neighbors[adjlist[y].number_of_neighbors-1]=x;
}
}
int mark=0;
for(int i=1;i<=number_of_vertices;i++)
{
if(visited[i]==false)
{
mark++;
DFS(adjlist,i,&visited);
}
}
fprintf(write, "%d\n", mark);
for(int i=1;i<=number_of_vertices;i++)
if(adjlist[i].number_of_neighbors!=0)
free(adjlist[i].neighbors);
free(visited);
free(adjlist);
fclose(read);
fclose(write);
return 0;
}