.Net 版本 Dijkstra
来源:互联网 发布:ubuntu新建文件 编辑:程序博客网 时间:2024/06/07 05:08
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
namespace ConsoleApplication
{
class Dijkstra
{
private List<Model> list = new List<Model>();
public List<Model> Shorpath(DataTable dt)
{
DataRow[] drArr;
string strNode;
string strNodeNext;
int iNodePoint;
Model model;
//判断符合增加到列表的条件
bool blinfo;
drArr = dt.Select("node='0'");
foreach (DataRow dr in drArr)
{
blinfo = false;
strNode = dr[0].ToString();
strNodeNext = dr[1].ToString();
iNodePoint = Int32.Parse(dr[2].ToString());
model=new Model();
model.setNode(strNode);
model.setNodeNext(strNodeNext);
model.setNodePoint(iNodePoint);
model.setNodeInfo(strNode+"->"+strNodeNext);
model.setNodeSum(iNodePoint);
//得到子节点所有最短路径
for (int i = 0; i < list.Count; i++)
{
if (list[i].getNodeNext().Equals(model.getNodeNext()) == true)
{
blinfo = true;
if (list[i].getNodeSum() > model.getNodeSum())
{
list[i] = model;
}
else
{
//最短路径相同时添加路径
if (list[i].getNodeSum() == model.getNodeSum())
{
blinfo = false;
}
}
break;
}
}
if (blinfo == false)
{
list.Add(model);
}
CalculatePath(model,dt);
}
return list;
}
//计算下一节点的最短路径,并更新结果集
public void CalculatePath(Model model, DataTable dt)
{
string strNode;
string strNodeNext;
int iNodePoint;
Model modelNew = null;
DataRow[] drArr;
bool blinfo;
drArr = dt.Select("node='" + model.getNodeNext() + "'");
if (drArr.Length != 0)
{
//得到子节点所有最短路径
foreach (DataRow dr in drArr)
{
blinfo = false;
strNode = dr[0].ToString();
strNodeNext = dr[1].ToString();
iNodePoint = Int32.Parse(dr[2].ToString());
modelNew = new Model();
modelNew.setNode(strNode);
modelNew.setNodeNext(strNodeNext);
modelNew.setNodePoint(iNodePoint);
modelNew.setNodeInfo(model.getNodeInfo() + "->" + strNodeNext);
modelNew.setNodeSum(model.getNodeSum()+iNodePoint);
//添加子节点时对已有节点判断是否重复
for (int i = 0; i < list.Count; i++)
{
if (list[i].getNodeNext().Equals(modelNew.getNodeNext())==true)
{
blinfo = true;
if (list[i].getNodeSum() > modelNew.getNodeSum())
{
list[i] = modelNew;
}
else
{
//最短路径相同时添加路径
if (list[i].getNodeSum() == modelNew.getNodeSum())
{
blinfo = false;
}
}
break;
}
}
if (blinfo == false)
{
list.Add(modelNew);
}
CalculatePath(modelNew, dt);
}
}
}
}
}
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
namespace ConsoleApplication
{
class Dijkstra
{
private List<Model> list = new List<Model>();
public List<Model> Shorpath(DataTable dt)
{
DataRow[] drArr;
string strNode;
string strNodeNext;
int iNodePoint;
Model model;
//判断符合增加到列表的条件
bool blinfo;
drArr = dt.Select("node='0'");
foreach (DataRow dr in drArr)
{
blinfo = false;
strNode = dr[0].ToString();
strNodeNext = dr[1].ToString();
iNodePoint = Int32.Parse(dr[2].ToString());
model=new Model();
model.setNode(strNode);
model.setNodeNext(strNodeNext);
model.setNodePoint(iNodePoint);
model.setNodeInfo(strNode+"->"+strNodeNext);
model.setNodeSum(iNodePoint);
//得到子节点所有最短路径
for (int i = 0; i < list.Count; i++)
{
if (list[i].getNodeNext().Equals(model.getNodeNext()) == true)
{
blinfo = true;
if (list[i].getNodeSum() > model.getNodeSum())
{
list[i] = model;
}
else
{
//最短路径相同时添加路径
if (list[i].getNodeSum() == model.getNodeSum())
{
blinfo = false;
}
}
break;
}
}
if (blinfo == false)
{
list.Add(model);
}
CalculatePath(model,dt);
}
return list;
}
//计算下一节点的最短路径,并更新结果集
public void CalculatePath(Model model, DataTable dt)
{
string strNode;
string strNodeNext;
int iNodePoint;
Model modelNew = null;
DataRow[] drArr;
bool blinfo;
drArr = dt.Select("node='" + model.getNodeNext() + "'");
if (drArr.Length != 0)
{
//得到子节点所有最短路径
foreach (DataRow dr in drArr)
{
blinfo = false;
strNode = dr[0].ToString();
strNodeNext = dr[1].ToString();
iNodePoint = Int32.Parse(dr[2].ToString());
modelNew = new Model();
modelNew.setNode(strNode);
modelNew.setNodeNext(strNodeNext);
modelNew.setNodePoint(iNodePoint);
modelNew.setNodeInfo(model.getNodeInfo() + "->" + strNodeNext);
modelNew.setNodeSum(model.getNodeSum()+iNodePoint);
//添加子节点时对已有节点判断是否重复
for (int i = 0; i < list.Count; i++)
{
if (list[i].getNodeNext().Equals(modelNew.getNodeNext())==true)
{
blinfo = true;
if (list[i].getNodeSum() > modelNew.getNodeSum())
{
list[i] = modelNew;
}
else
{
//最短路径相同时添加路径
if (list[i].getNodeSum() == modelNew.getNodeSum())
{
blinfo = false;
}
}
break;
}
}
if (blinfo == false)
{
list.Add(modelNew);
}
CalculatePath(modelNew, dt);
}
}
}
}
}
Dijkstra
注明 转载
- .Net 版本 Dijkstra
- Dijkstra算法之优先队列优化版本 By ACReaper Dijkstra
- dijkstra
- dijkstra
- Dijkstra
- Dijkstra
- DIJKSTRA
- DIJKSTRA
- Dijkstra
- dijkstra
- dijkstra
- Dijkstra
- Dijkstra
- Dijkstra
- dijkstra
- Dijkstra
- Dijkstra
- Dijkstra
- android中关于Cursor类的介绍
- Android入门之Spinner(纯java)
- 如何自定义View及在配置文件中增加描述属性
- A 项目 实战 (二)Spring 与 Struts 集成
- Rails 3入门之二 2- 2 Rails组件
- .Net 版本 Dijkstra
- 2011 09 06 学习总结
- RTP如何打包H264数据
- SQL---DML---UPDATE和DELETE的指导原则
- 线程的生命周期
- DllMain相关注意事项
- 单向链表实现
- DevExpress ASPXGridView 主从表 master detail 动态绑定数据
- 微软为什么给操作系统取名叫Windows 7