0

I am new to C# programming and I was trying to implement Dijkstra algorithm in C# to get the shortest distance between two nodes but I am getting following error-

error CS1525: Unexpected symbol void', expecting class', delegate', enum', interface', partial', or `struct'

prog.cs(54,16): error CS1525: Unexpected symbol int', expecting class', delegate', enum', interface', partial', or `struct'

prog.cs(54,21): error CS1514: Unexpected symbol [', expecting .' or `{'

prog.cs(54,21): warning CS0658: `,' is invalid attribute target. All attributes in this attribute section will be ignored

This is my code:

using System;
using System.Collections.Generic;

namespace Dijkstras
{
    class Graph
    {
        int V = 9;
        int minDistance(int[] dist, bool[] sptSet)
        {
 
            int min = 100; int min_index=0;

            for (int v = 0; v < V; v++)
                if (sptSet[v] == false && dist[v] <= min)
                   { min = dist[v]; min_index = v;}

            return min_index;
        }

        int printSolution(int[] dist, int n)
         {
            Console.WriteLine("Vertex   Distance from Source");
            for (int i = 0; i < V; i++)
            {
                Console.Write(i); Console.Write("      ");
                Console.WriteLine(dist[i]);
            }return 0;
         }
        void dijkstra(int [,] graph , int src)
          {    //graph=new int[V,V];
                int [] dist=new int[V];    
                bool [] sptSet=new bool[V];
                for (int i = 0; i < V; i++)
                 {  dist[i] = 100;
                    sptSet[i] = false;
                 }
                dist[src] = 0;
                for (int count = 0; count < V-1; count++)
                     {
                        int u = minDistance(dist, sptSet);
                        sptSet[u] = true;
                        for (int v = 0; v < V; v++)
                         {  if (sptSet[v]==false && dist[u] != 100 && dist[u]+graph[u,v] < dist[v])
                                dist[v] = dist[u] + graph[u,v];
                         }
                     }
                printSolution(dist, V);
          }
    }
       
     public static void Main()
      {
                int [,] graph =new int[,] {{0, 4, 0, 0, 0, 0, 0, 8, 0},
                      {4, 0, 8, 0, 0, 0, 0, 11, 0},
                      {0, 8, 0, 7, 0, 4, 0, 0, 2},
                      {0, 0, 7, 0, 9, 14, 0, 0, 0},
                      {0, 0, 0, 9, 0, 10, 0, 0, 0},
                      {0, 0, 4, 0, 10, 0, 2, 0, 0},
                      {0, 0, 0, 14, 0, 2, 0, 1, 6},
                      {8, 11, 0, 0, 0, 0, 1, 0, 7},
                      {0, 0, 2, 0, 0, 0, 6, 7, 0}
                     };
                dijkstra(graph, 0);
     }
        
 }

Can someone please tell me what is wrong with my code?

Community
  • 1
  • 1
  • algorithm Tag is irrelevant to the question. Those are all compile time errors and warning. Terrible coding btw, consider reading some naming and coding conventions in C#. See Jon Skeet's answer [here](http://stackoverflow.com/questions/1618316/naming-convention-in-c-sharp) for start. – Oğuz Sezer Feb 13 '15 at 14:34

3 Answers3

4

You've got several problems here.

  1. Your Main function isn't inside of a class. In C# all methods must be inside a class. Move Main inside the Graph class.
  2. Your functions need to be static so they can be referenced from your Main method.
  3. Your variables need to be static so they can be referenced from your now-static functions.

Alternatively to 2 & 3, you could use object oriented programming and make an object out of the Graph class instead of doing all static functions. This could be done by changing the last line of your Main function to something like

Graph graphObject = new Graph();
graphObject.dijkstra(graph, 0);

and then you can leave everything not static.

Do all three of those steps and it will compile. I didn't check for correctness though.

Tim
  • 14,999
  • 1
  • 45
  • 68
2

First spotted problem here:

public static void Main()

it is method declared outside any class, just in namespace - this can't be done in C#. Wrap it into some class.

Andrey Korneyev
  • 26,353
  • 15
  • 70
  • 71
0

You have put your main method outside of the graph class. Move the main method inside the graph class and call dijkstra like this:

new Graph().dijkstra(graph, 0);
tbergq
  • 724
  • 6
  • 12