Cod sursa(job #2926971)

Utilizator vali2wdAdrian Valentin Nafornita vali2wd Data 19 octombrie 2022 00:31:53
Problema Parcurgere DFS - componente conexe Scor 0
Compilator py Status done
Runda Arhiva educationala Marime 2.63 kb
import sys

import self as self


class Adjacency:
    def __init__(self, fisier, orientation):
        self._file = fisier
        self.adjMatr = self.BuildAdjMatr(orientation)
        self.adjList = self.BuildAdjList(orientation)

    def DFS(self, node, visited = set()):
        if node not in visited:
            #print(node, end= " ")
            visited.add(node)
            for neighbor in self.adjList[node]:
                self.DFS(neighbor,visited)

    def ConnectedComp(self, visited = set()):
        connectedComponents = 1
        for node in self.adjList.keys():
            self.DFS(node, visited)
            break

        for node in self.adjList.keys():
            if node not in visited:
                connectedComponents += 1

        return connectedComponents





    def BuildAdjMatr(self, oriented=0):
        fileName = open(self._file)
        line = fileName.readline().rstrip('\n').split()

        vertex = int(line[0])
        edge = int(line[1])

        edgeArray = []
        for line in fileName:
            myLine = line.rstrip('\n').split()
            edgeArray.append([myLine[0], myLine[1]])

        adjMatrix = [[0 for i in range(vertex + 1)] for j in range(vertex + 1)]

        if oriented == 0:
            for aSet in edgeArray:
                adjMatrix[int(aSet[0])][int(aSet[1])] = 1
                adjMatrix[int(aSet[1])][int(aSet[0])] = 1
        else:
            for aSet in edgeArray:
                adjMatrix[int(aSet[0])][int(aSet[1])] = 1
        return adjMatrix

    def BuildAdjList(self, oriented=0):
        fileName = open(self._file)
        line = fileName.readline().rstrip('\n').split()

        vertex = int(line[0])
        edge = int(line[1])

        edgeArray = []
        vertexDic = {}
        for line in fileName:
            myLine = line.rstrip('\n').split()
            edgeArray.append([myLine[0], myLine[1]])

            if oriented == 1:
                try:
                    vertexDic[myLine[0]].append(myLine[1])
                except:
                    vertexDic.update({myLine[0]: [myLine[1]]})
            else:
                try:
                    vertexDic[myLine[0]].append(myLine[1])
                except:
                    vertexDic.update({myLine[0]: [myLine[1]]})

                try:
                    vertexDic[myLine[1]].append(myLine[0])
                except:
                    vertexDic.update({myLine[1]: [myLine[0]]})

        return vertexDic


one = Adjacency("dfs.in", 0)
x = one.ConnectedComp()

with open("dfs.out",'w') as f:
    sys.stdout = f
    print(x)