コード例 #1
0
 public void GetNeighbors(Graph.Node node, List <string> NeighborList)
 {
     foreach (var neighbor in node.neighbors)
     {
         if (!NeighborList.Exists(n => n == neighbor.val))
         {
             NeighborList.Add(neighbor.val);
         }
         foreach (var _neighbor in neighbor.neighbors)
         {
             if (!NeighborList.Exists(n => n == _neighbor.val))
             {
                 NeighborList.Add(_neighbor.val);
             }
             GetNeighbors(_neighbor, NeighborList);
         }
     }
 }
コード例 #2
0
ファイル: Program.cs プロジェクト: OutofSkills/PackageManager
        /*Task 1*/
        //public static void Main()
        //{
        //	/*graph data structure*/
        //	Graph graph = new Graph();
        //	/*File manager object*/
        //	IOFile file = new IOFile();
        //	/*List of nodes to be added*/
        //	List<Graph.Node> nodes = new List<Graph.Node>();

        //	/*list of pairs A B parsed from the input file*/
        //	List<string[]> list = file.Read();

        //	foreach(var item in list)
        //          {
        //		var tempNode = new Graph.Node(item[0]);
        //		/*if the node doesn't exist create it and add his neighbors*/
        //		if (!nodes.Exists(n => n.val == tempNode.val))
        //		{
        //			nodes.Add(tempNode);
        //			tempNode.neighbors = new List<Graph.Node> { };

        //			if(!nodes.Exists(n => n.val == item[1]))
        //                  {
        //				var neighbor = new Graph.Node(item[1]);
        //				nodes.Add(neighbor);
        //				tempNode.neighbors.Add(neighbor);
        //			}
        //			else
        //                  {
        //				var index = nodes.FindIndex(n=>n.val == item[1]);
        //				tempNode.neighbors.Add(nodes[index]);
        //                  }
        //		}
        //		else/*if the node already exists, just add the neighbors*/
        //              {
        //			var index = nodes.FindIndex(n => n.val == item[0]);

        //			if (!nodes.Exists(n => n.val == item[1]))
        //			{
        //				var neighbor = new Graph.Node(item[1]);
        //				nodes.Add(neighbor);
        //				nodes[index].neighbors.Add(neighbor);
        //			}
        //			else
        //			{
        //				var i = nodes.FindIndex(n => n.val == item[1]);
        //				nodes[index].neighbors.Add(nodes[i]);
        //			}
        //		}
        //	}

        //	/*Traverse the graph and store the node's values to a list*/
        //	graph.Dfs(nodes);
        //	/*sort the list*/
        //	graph._list.Sort();

        //	/*write the data to the output file*/
        //	file.Write(graph._list);

        //}

        /*Task 2*/
        //public static void Main()
        //{
        //	/*graph data structure*/
        //	Graph graph = new Graph();
        //	/*File manager object*/
        //	IOFile file = new IOFile();
        //	/*List of nodes to be added*/
        //	List<Graph.Node> nodes = new List<Graph.Node>();

        //	/*list of pairs A B parsed from the input file*/
        //	List<string[]> list = file.Read();

        //	foreach (var item in list)
        //	{
        //		var tempNode = new Graph.Node(item[0]);
        //		/*if the node doesn't exist create it and add his neighbors*/
        //		if (!nodes.Exists(n => n.val == tempNode.val))
        //		{
        //			nodes.Add(tempNode);
        //			tempNode.neighbors = new List<Graph.Node> { };

        //			if (!nodes.Exists(n => n.val == item[1]))
        //			{
        //				var neighbor = new Graph.Node(item[1]);
        //				nodes.Add(neighbor);
        //				tempNode.neighbors.Add(neighbor);
        //			}
        //			else
        //			{
        //				var index = nodes.FindIndex(n => n.val == item[1]);
        //				tempNode.neighbors.Add(nodes[index]);
        //			}
        //		}
        //		else/*if the node already exists, just add the neighbors*/
        //		{
        //			var index = nodes.FindIndex(n => n.val == item[0]);

        //			if (!nodes.Exists(n => n.val == item[1]))
        //			{
        //				var neighbor = new Graph.Node(item[1]);
        //				nodes.Add(neighbor);
        //				nodes[index].neighbors.Add(neighbor);
        //			}
        //			else
        //			{
        //				var i = nodes.FindIndex(n => n.val == item[1]);
        //				nodes[index].neighbors.Add(nodes[i]);
        //			}
        //		}
        //	}

        //	/*sort the nodes*/
        //	var SortedList = nodes.OrderBy(n => n.val).ToList();
        //	/*write the data to the output file*/
        //	file.Write(graph.TraverseGraf(SortedList), SortedList);

        //}

        /*Task 3*/
        public static void Main()
        {
            /*graph data structure*/
            Graph graph = new Graph();
            /*File manager object*/
            IOFile file = new IOFile();
            /*List of nodes to be added*/
            List <Graph.Node> nodes = new List <Graph.Node>();

            /*list of pairs A B parsed from the input file*/
            List <string[]> list = file.Read("C:\\Users\\kojoc\\source\\repos\\PackageManager\\PackageManager\\Task 3\\Data\\deps.in");

            foreach (var item in list)
            {
                var tempNode = new Graph.Node(item[0]);
                /*if the node doesn't exist create it and add his neighbors*/
                if (!nodes.Exists(n => n.val == tempNode.val))
                {
                    nodes.Add(tempNode);
                    tempNode.neighbors = new List <Graph.Node> {
                    };

                    if (!nodes.Exists(n => n.val == item[1]))
                    {
                        var neighbor = new Graph.Node(item[1]);
                        nodes.Add(neighbor);
                        tempNode.neighbors.Add(neighbor);
                    }
                    else
                    {
                        var index = nodes.FindIndex(n => n.val == item[1]);
                        tempNode.neighbors.Add(nodes[index]);
                    }
                }
                else                /*if the node already exists, just add the neighbors*/
                {
                    var index = nodes.FindIndex(n => n.val == item[0]);

                    if (!nodes.Exists(n => n.val == item[1]))
                    {
                        var neighbor = new Graph.Node(item[1]);
                        nodes.Add(neighbor);
                        nodes[index].neighbors.Add(neighbor);
                    }
                    else
                    {
                        var i = nodes.FindIndex(n => n.val == item[1]);
                        nodes[index].neighbors.Add(nodes[i]);
                    }
                }
            }

            /*sort the nodes*/
            var SortedList         = nodes.OrderBy(n => n.val).ToList();
            var listNodesNeighbors = graph.TraverseGraf(SortedList);

            /*list of pairs A B parsed from the input file*/
            List <string[]>       listPcIn        = file.Read("C:\\Users\\kojoc\\source\\repos\\PackageManager\\PackageManager\\Task 3\\Data\\computers.in");
            List <List <string> > PcPackages      = new List <List <string> >();;
            List <List <string> > missingPackages = new List <List <string> >();

            /*for each package add his dependencies*/
            for (int i = 0; i < listNodesNeighbors.Count; i++)
            {
                listNodesNeighbors[i].Insert(0, SortedList[i].val);
            }
            /*get missing packages*/
            for (int i = 0; i < listPcIn.Count; i++)
            {
                PcPackages.Add(listPcIn[i].ToList());
                int j;
                for (j = 0; j < listNodesNeighbors.Count; j++)
                {
                    if (listNodesNeighbors[j][0] == PcPackages[i][0])
                    {
                        break;
                    }
                }
                List <string> missingPackage = listNodesNeighbors[j].Except(PcPackages[i]).ToList();
                missingPackages.Add(missingPackage);
            }
            /*write the missing packages to the task3.out*/
            file.Write(missingPackages);
        }