8000 can i find the leader/source vertex of a directed acyclic graph ? · Issue #166 · dominikbraun/graph · GitHub
[go: up one dir, main page]

Skip to content
  • can i find the leader/source vertex of a directed acyclic graph ? #166

    Open

    Description

    @AkashKumar7902
    No description provided.

    Activity

    1. changed the title [-]can i find the leader vertex of a directed acyclic graph ?[/-] [+]can i find the leader/source vertex of a directed acyclic graph ?[/+] on Feb 9, 2024
    2. AkashKumar7902 commented on Feb 9, 2024

      @AkashKumar7902
      Author

      A more wide application for implementing this would be to merge two graphs

      g.addEdge(vertex v, <source vertex of DAG>

      doing this will merge DAG into graph g on its vertex v.

      UPD:
      Found a solution for this,

      first you must implement findsource function, I have provided the implementation just below this comment.
      To merge two graphs, follow these steps:

      1. g1 = graph.Union(g1, g2)
      2. g1.addEdge(v, findsource(g2)), where v is a vertex of graph g1 from which we want to add an edge to complete the merge.
    3. AkashKumar7902 commented on Feb 11, 2024

      @AkashKumar7902
      Author

      To all those who might be looking for a solution:

      func FindSource[K comparable, T any](g graph.Graph[K, T]) ([]K, error) {
      	if !g.Traits().IsDirected {
      		return nil, fmt.Errorf("cannot find source of a non-DAG graph ")
      	}
      
      	predecessorMap, err := g.PredecessorMap()
      	if err != nil {
      		return nil, fmt.Errorf("failed to get predecessor map: %w", err)
      	}
      
      	var sources []K
      	for vertex, predecessors := range predecessorMap {
      		if len(predecessors) == 0 {
      			sources = append(sources, vertex)
      		}
      	}
      	return sources, nil
      }
    4. dominikbraun commented on Mar 6, 2024

      @dominikbraun
      Owner

      Hi, thanks for the late response! Using PredecessorMap and then backtrack to the root seems to be the correct approach. Is this issue then clarified for you? 😄

    5. AkashKumar7902 commented on Mar 6, 2024

      @AkashKumar7902
      Author

      @dominikbraun

      Yes. I was wondering will there be a function getSource in the package itself. I can send a PR for it.

    6. dominikbraun commented on Mar 6, 2024

      @dominikbraun
      Owner

      @dominikbraun

      Yes. I was wondering will there be a function getSource in the package itself. I can send a PR for it.

      @AkashKumar7902 Yes, that sounds reasonable. Feel free to submit a PR!

    Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

    Metadata

    Metadata

    Assignees

    No one assigned

      Labels

      questionFurther information is requested

      Projects

      No projects

        Milestone

        No milestone

        Relationships

        None yet

        Development

        No branches or pull requests

        Issue actions

      • 0