Go4Expert

Go4Expert (http://www.go4expert.com/)
-   C# (http://www.go4expert.com/forums/c-sharp/)
-   -   C++ to C# (http://www.go4expert.com/forums/cpp-c-sharp-t28947/)

Loosexll 27Aug2012 08:43

C++ to C#
 
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

xpi0t0s 28Aug2012 00:38

Re: C++ to C#
 
"it not work" is not a very helpful description of the problem.
What doesn't it do that you expected, or what does it do that you didn't expect?
What line of code does it start going wrong?
Have you tried adding some debug statements to display where it's up to and what the variable values are? This could help you determine what is wrong.

In fact if you're using Visual Studio, have you tried stepping through it in the debugger? Watching it execute line by line with the ability to watch variable contents is a spectacularly efficient way to find bugs.


All times are GMT +5.5. The time now is 14:29.