Thread: C++ to C#
View Single Post
Newbie Member
27Aug2012,08:43  
Loosexll's Avatar
I code a algorithm by C++(Breadth first search), and i converted to C#, but it not work, i can found error. Please test it in your VS and fix it.
C++:
Code:
#include <iostream>
#include <queue>

using namespace std;

const int maxx = 20;

void Read_input_from_user(bool grid[][maxx], int vertices)
{
    int u, v;
    for(int x = 0; x < vertices; ++x)
    {
        cout << "Enter u : \t"; 
        cin >> u;
        u--;
        cout << "Enter v : \t";
        cin >> v;
        v--;
        grid[u][v] = true;
                grid[v][u] = true;
        cout << "---------------------\n";
    }
}

void Breadth_first_search(queue<int> &Q, vector<int> &trace,
                          bool grid[][maxx], int start, int nodes)
{
    int u;
    vector<int> visited(maxx,0);
    Q.push(start);
    trace[start] = -1;
    visited[start] = 1;
    do{
        u = Q.front();
        Q.pop();
        for(int v = 0; v < nodes; ++v)
        {
            if((grid[u][v] == true) && visited[v] == 0)
            {
                Q.push(v);
                trace[v] = u;
                visited[v] = 1;
            }
        }
    }while(!Q.empty());
}

void Trace_result(vector<int> &trace, int start, int end, int nodes)
{
    cout << "From _nodes" << start + 1 << " you can visit :\n";
    for(int v = 0; v < nodes; ++v)
    {
        if(trace[v] != 0)
        {
            cout << " _nodes : " << v + 1 << " , ";
        }
    }

    cout << "\n--------------------------------------------\n";
    cout << "The path from " << start + 1 << " to " << end + 1 << '\n';
    
    if(trace[end] == 0){
        cout << "Unavailable.! to go to from " << end + 1 
             << " to -> " << start + 1 << '\n';
    }
    else{
        while(end != start)
        {
            cout << end + 1 << "<-";
            end = trace[end];
        }
        cout << start + 1 << endl;
    }
    
}


int main()
{
    //Initialization
    vector<int> trace(maxx, 0);
    queue<int> Q;
    bool grid[maxx][maxx] = {false};
    
    int nodes, vertices;
    cout << "Please input the number of Node : \n";
    cin >> nodes;
    cout << "Please input the number of Vertices : \n";
    cin >> vertices;

    //Set value for all vertices.
    Read_input_from_user(grid, vertices); 

    //Read the necessary path
    int starting_position, finishing_position;
    cout << "Please Input the Starting Node : \n";
    cin >> starting_position;
    cout << "Please Input the Finishing Node : \n";
    cin >> finishing_position;
    //Decrease to fit with index of C++ start from 0->size-1
    starting_position--;
    finishing_position--;
    //Algorithm starts 
    Breadth_first_search(Q, trace, grid, starting_position, nodes);
    Trace_result(trace, starting_position, finishing_position, nodes);
    system("pause");
    return 0;
}
C#:
Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        private const int maxx = 20;

         static void Read_input_from_user(bool[,] grid, int vertices)
        {
            int u;
            int v;
            for (int x = 0; x < vertices; ++x)
            {
                Console.Write("Enter u : \t");
                u = Convert.ToInt32(Console.ReadLine());
                u--;
                Console.Write("Enter v : \t");
                v = Convert.ToInt32(Console.ReadLine());
                v--;
                grid[u, v] = true;
                grid[v, u] = true;
                Console.Write("---------------------\n");
            }
        }

         static void Breadth_first_search( Queue<int> Q,  List<int> trace, bool[,] grid, int start, int nodes)
        {
            int u;
            List<int> visited = new List<int>(maxx);
            Q.Enqueue(start);
            trace[start] = -1;
            visited[start] = 1;
            do
            {
                u = Q.Peek();
                Q.Dequeue();
                for (int v = 0; v < nodes; ++v)
                {
                    if ((grid[u, v] == true) && visited[v] == 0)
                    {
                        Q.Enqueue(v);
                        trace[v] = u;
                        visited[v] = 1;
                    }
                }
            } while (Q.Count != 0);
        }

         static void Trace_result(  List<int> trace, int start, int end, int nodes)
        {
            Console.Write("From _nodes");
            Console.Write(start + 1);
            Console.Write(" you can visit :\n");
            for (int v = 0; v < nodes; ++v)
            {
                if (trace[v] != 0)
                {
                    Console.Write(" _nodes : ");
                    Console.Write(v + 1);
                    Console.Write(" , ");
                }
            }

            Console.Write("\n--------------------------------------------\n");
            Console.Write("The path from ");
            Console.Write(start + 1);
            Console.Write(" to ");
            Console.Write(end + 1);
            Console.Write('\n');

            if (trace[end] == 0)
            {
                Console.Write("Unavailable.! to go to from ");
                Console.Write(end + 1);
                Console.Write(" to -> ");
                Console.Write(start + 1);
                Console.Write('\n');
            }
            else
            {
                while (end != start)
                {
                    Console.Write(end + 1);
                    Console.Write("<-");
                    end = trace[end];
                }
                Console.Write(start + 1);
                Console.Write("\n");
            }

        }
         static int Main()
        {
            //Initialization
            List<int> trace = new List<int>(maxx);
            Queue<int> Q = new Queue<int>();
            bool[,] grid = new bool[maxx, maxx];
            
            int nodes;
            int vertices;
            Console.Write("Please input the number of Node : \n");
            //cin >> nodes;
            nodes = Convert.ToInt32(Console.ReadLine());
            Console.Write("Please input the number of Vertices : \n");
            //cin >> vertices;
            vertices = Convert.ToInt32(Console.ReadLine());
            //Set value for all vertices.
            Read_input_from_user(grid, vertices);
            
            //Read the necessary path
            int starting_position;
            int finishing_position;
            Console.Write("Please Input the Starting Node : \n");
            //cin >> starting_position;
            starting_position = Convert.ToInt32(Console.ReadLine());
            Console.Write("Please Input the Finishing Node : \n");
            //cin >> finishing_position;
            finishing_position = Convert.ToInt32(Console.ReadLine());
            //Decrease to fit with index of C++ start from 0->size-1
            starting_position--;
            finishing_position--;
            //Algorithm starts 
            Breadth_first_search( Q,  trace, grid, starting_position, nodes);
            Trace_result( trace, starting_position, finishing_position, nodes);
            Console.ReadLine();
            return 0;
        }
    }
}
Please help me