首页 / C# / C#-使用递归查找最便宜的道路
C#-使用递归查找最便宜的道路
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了C#-使用递归查找最便宜的道路,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2501字,纯文字阅读大概需要4分钟。
内容图文
![C#-使用递归查找最便宜的道路](/upload/InfoBanner/zyjiaocheng/670/06860e6f385246eea270696e5b628833.jpg)
我需要使用递归找到最便宜的道路.这条道路从点1开始,它需要经过所有其他点(2,3,4,5)然后回到点1.每点之间的旅行成本为在二维数组(地图)中.
╔═══════════════════════╗
║ 1|2|3|4|5|(points) ║
║ 1--0 1 3 4 2 ║
║ 2--1 0 4 2 6 ║
║ 3--3 4 0 7 1 ║
║ 4--4 2 7 0 7 ║
║ 5--2 6 1 7 0 ║
║ (points) ║
╚═══════════════════════╝
这意味着,例如,从点1到点5的成本为2,从点5到点4的成本为7.每次在地图中切换“方向”时.我认为尝试次数应等于25(4!1)
void FindingRoad(int[][] map, int[] pointsOrder, ref int tripCost, ref int attempts)
{
if (attempts == 0)
{
return;
}
int tempCost = 0;
int[] tempPointsOrder = new int[5];
for (int i = 0; i < 5; i++)
{
for (int j = 0; j < 5; j++)
{
}
}
if (tempCost<tripCost)
{
tripCost = tempCost;
pointsOrder = tempPointsOrder;
}
attempts--;
FindingRoad(map,pointsOrder,ref tripCost,attempts);
}
预期道路(点订单)输出应为1、5(2),3(1),2(4),4(2),1(4),成本为13
关于for循环的任何建议可能是什么样的?
解决方法:
有3个主要功能.第一和第二创建所有可能的道路,第三计算它们的成本.希望对您有所帮助
static void AllRoads(int[] a, int size, int n, RoadContainer VisiKeliai, int[][]map)
{
// if size becomes 1 then prints the obtained
// permutation
if (size == 1)
printArr(a, n, VisiKeliai,map);
for (int i = 0; i < size; i++)
{
AllRoads(a, size - 1, n, VisiKeliai,map);
// if size is odd, swap first and last
// element
if (size % 2 == 1)
{
int temp = a[0];
a[0] = a[size - 1];
a[size - 1] = temp;
}
// If size is even, swap ith and last
// element
else
{
int temp = a[i];
a[i] = a[size - 1];
a[size - 1] = temp;
}
}
}
static void printArr(int[] a, int n, RoadContainer VisiKeliai, int[][]map)
{
string s = "0";
// Console.WriteLine("dassaddsasdaasdas" + a.Length);
for (int i = 0; i < n; i++)
{
// Console.Write(a[i] + " ");
s += Convert.ToString(a[i]);
}
s = s.Insert(s.Length, "0");
Road r = new Road(s);
CalculatingPrice(r, map);
VisiKeliai.AddRoad(r);
//Console.WriteLine(s);
}
public static void CalculatingPrice(Road Kelias, int[][] map)
{
// 021430 Road im checking
Console.WriteLine("Kelias: " + Kelias.Path);
for (int i = 0; i < Kelias.Path.Length - 1; i++)
{
int nextI = i + 1;
for (int j = 0; j < 5; j++)
{
for (int m = 0; m < 5; m++)
{
string a = Convert.ToString(m);
string aaa = Convert.ToString(Kelias.Path[i]);
string b = Convert.ToString(j);
string bbb = Convert.ToString(Kelias.Path[nextI]);
if (a == aaa && b == bbb)
{
Console.WriteLine(a + "--" + aaa + "---" + b + "----" + bbb + "-------------" + map[j][m]);
Kelias.Cost += map[j][m];
}
}
}
}
}
内容总结
以上是互联网集市为您收集整理的C#-使用递归查找最便宜的道路全部内容,希望文章能够帮你解决C#-使用递归查找最便宜的道路所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。