怎么修改这个算法double GetWeight(ALGraph G, int nStart, int nEnd, char cKind) { double dTorM = INFINITY*1.0; if (cKind == 'T' || cKind == 'M') { if (cKind == 'T') { ArcNode* pT = G.vertices[nStart].Firstarc; for (; pT != NULL; pT = pT->nextArc) { if (pT->nAdjvex == nEnd) { if (pT->Information.dTime < dTorM) dTorM = pT->Information.dTime; } } } else{ ArcNode* pM = G.vertices[nStart].Firstarc; for (; pM != NULL; pM = pM->nextArc) { if (pM->nAdjvex == nEnd) { if (pM->Information.dCost < dTorM) dTorM = pM->Information.dCost; } } } return dTorM; } else { cout << "Input error! Please enter T or M." << endl; cout << " If Time please enter T. If Money please enter M." << endl; cin >> cKind; return GetWeight(G, nStart, nEnd, cKind); } }
时间: 2024-01-16 19:02:01 浏览: 112
编程实现路由算法.doc
可以按照以下方式修改算法:
1. 在输入参数时,添加一个循环,直到用户输入的参数为'T'或'M'为止。如果用户输入的不是这两个字符,则输出错误信息并要求用户重新输入,直到输入正确为止。
2. 在计算最小权值时,将dTorM的初值设为无穷大,以确保最小权值的准确性。
3. 在遍历邻接表的过程中,先判断邻接表是否为空,如果为空,则直接返回无穷大。如果不为空,则继续遍历邻接表。
修改后的代码如下:
```c++
double GetWeight(ALGraph G, int nStart, int nEnd, char cKind) {
double dTorM = numeric_limits<double>::infinity();
while (cKind != 'T' && cKind != 'M') {
cout << "Input error! Please enter T or M." << endl;
cout << "If Time please enter T. If Money please enter M." << endl;
cin >> cKind;
}
if (cKind == 'T') {
ArcNode* pT = G.vertices[nStart].Firstarc;
if (pT == NULL) {
return dTorM;
}
for (; pT != NULL; pT = pT->nextArc) {
if (pT->nAdjvex == nEnd) {
if (pT->Information.dTime < dTorM) {
dTorM = pT->Information.dTime;
}
}
}
}
else if (cKind == 'M') {
ArcNode* pM = G.vertices[nStart].Firstarc;
if (pM == NULL) {
return dTorM;
}
for (; pM != NULL; pM = pM->nextArc) {
if (pM->nAdjvex == nEnd) {
if (pM->Information.dCost < dTorM) {
dTorM = pM->Information.dCost;
}
}
}
}
return dTorM;
}
```
阅读全文