C#误差中的Dijkstra算法
我是C#编程新手,我试图在C#中实现Dijkstra算法,以获得两个节点之间的最短距离,但我得到以下错误- 错误CS1525:意外符号C#误差中的Dijkstra算法,c#,algorithm,C#,Algorithm,我是C#编程新手,我试图在C#中实现Dijkstra算法,以获得两个节点之间的最短距离,但我得到以下错误- 错误CS1525:意外符号void',应为class'、delegate'、enum'、interface'、partial'或“struct” 程序cs(54,16):错误CS1525:意外符号int',应为class',delegate',enum',interface',partial',或'struct' prog.cs(54,21):错误CS1514:意外符号[',应为'或`{'
void',应为
class'、delegate'、
enum'、interface'、
partial'或“struct”
程序cs(54,16):错误CS1525:意外符号int',应为class',delegate',
enum',interface',
partial',或'struct'
prog.cs(54,21):错误CS1514:意外符号[',应为
'或`{'
prog.cs(54,21):警告CS0658:`'是无效的属性目标。将忽略此属性节中的所有属性
这是我的代码:
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);
}
}
使用系统;
使用System.Collections.Generic;
命名空间Dijkstras
{
类图
{
int V=9;
内部距离(内部[]距离,布尔[]标准点)
{
最小整数=100;最小整数指数=0;
对于(int v=0;v 如果(sptSet[v]==false&&dist[v]首先在此处发现问题:
public static void Main()
它是在任何类之外声明的方法,只是在名称空间中-这不能在C#中完成。请将它包装到某个类中。首先在此处发现问题:
public static void Main()
它是在任何类之外声明的方法,只是在名称空间中-这不能在C#中完成。将它包装到某个类中。这里有几个问题
Main函数不在类内。在C#中,所有方法都必须在类内。将Main移到Graph类内
您的函数需要是静态的,以便可以从主方法引用它们
您的变量需要是静态的,以便可以从现在的静态函数引用它们
除了2和3之外,您还可以使用面向对象编程,从Graph类中生成一个对象,而不是执行所有静态函数
Graph graphObject = new Graph();
graphObject.dijkstra(graph, 0);
然后你可以让一切都不是静止的
执行所有这三个步骤,它就会编译。不过我没有检查正确性。这里有几个问题
Main函数不在类内。在C#中,所有方法都必须在类内。将Main移到Graph类内
您的函数需要是静态的,以便可以从主方法引用它们
您的变量需要是静态的,以便可以从现在的静态函数引用它们
除了2和3之外,您还可以使用面向对象编程,从Graph类中生成一个对象,而不是执行所有静态函数
Graph graphObject = new Graph();
graphObject.dijkstra(graph, 0);
然后你可以让一切都不是静止的
执行所有这三个步骤,它就会编译。不过我没有检查正确性。您已将主方法放在graph类之外。将主方法移到graph类中,并按如下方式调用dijkstra:
new Graph().dijkstra(graph, 0);
您已将main方法放在graph类之外。请将main方法移到graph类内,然后按如下方式调用dijkstra:
new Graph().dijkstra(graph, 0);
算法标签与问题无关,这些都是编译时错误和警告。可怕的编码BTW,考虑读取C中的一些命名和编码约定。参见乔恩SkestStor的回答。算法标签与问题无关。这些都是编译时错误和警告。可怕的代码BTW,考虑阅读一些命名。和C#中的编码约定。请参阅Jon Skeet的开始答案。