因此,我做了一個關於在圖形中查找用戶指定的兩個節點之間的所有路由的作業。代碼有效,但存在一個小問題。在圖中找到所有可能的路由時無法擺脫死角
(我知道,我應該是一個藝術家,而不是一個電腦工程師)
所以我告訴程序告訴我節點0和3之間的所有可能的路線,這是輸出(不是精確的輸出):
0-3
0-1-2-3
0-2-1-3
所以問題在於最後一條路線。而不是0-2-3去0-2-1-3。因爲它不知道1是死路一條。所以要麼我不應該爲死衚衕節點做任何事情,要麼當我明白它們是死衚衕時不打印它們。
我試着做一些遞歸的東西,以檢查下一個節點是否是死衚衕,但他們竟然是無限循環。
那麼我該如何解決這個問題呢?
/*
Description: Finds all possible routes from a starting node to an end node
that is picked by the user.
NOTE: This code is working in devc++ but it has problems in visual studio
because of different functions.
*/
#include <stdio.h>
#include <string.h>
find_routes2(int start, int finish, char route[9], char route_temp[9],
int mark[4], int graph[4][4])
{
int i;
char route_temp2[9];
for(i = 0; i < 4; i++) {
if (graph[start][i] != 0 && mark[i] != 0) {
sprintf(route_temp2, "-> %d", i);
strcat(route, route_temp2);
if (i == finish) {
printf("\nRoute: %s\n", route);
strcpy(route, route_temp);
} else {
mark[start] = 0;
find_routes2(i, finish, route, route_temp, mark, graph);
}
}
}
}
find_routes(int start, int finish, char route[9], char route_temp[9],
int mark[4], int graph[4][4])
{
int i;
char route_temp2[9];
for (i = 0; i < 4; i++) {
if (graph[start][i] != 0 && mark[i] != 0) {
sprintf(route_temp2, "-> %d ", i);
strcat(route, route_temp2);
if (i == finish) {
printf("\nRoute: %s\n\n", route);
} else {
mark[start] = 0;
find_routes2(i, finish, route, route_temp, mark, graph);
}
memset(mark, 1, 4*sizeof(int));
strcpy(route, route_temp);
}
}
}
int main()
{
int graph[4][4] = { { 0, 1, 1, 1 }, { 1, 0, 1, 0 },
{ 1, 1, 0, 1 }, { 1, 0, 1, 0 } };
int mark[4] = { 1, 1, 1, 1 };
char route[9];
char route_temp[9];
int i, j;
printf("NOTE: This code is working in devc++ but it has problems \n"
"in visual studio because of different functions\n\n");
printf("This is the graph(nodes are 0, 1, 2 ,3):\n\n0-1-2-3\n\n");
for (i = 0; i < 4; i++) {
for (j = 0; j < 4; j++) {
printf("%d ", graph[i][j]);
}
printf("\n\n");
}
printf("Select a starting node from \"0, 1, 2 ,3\": ");
scanf("%d", &i);
sprintf(route, "-> %d", i);
strcpy(route_temp, route);
printf("\nSelect a different ending node from \"0, 1, 2 ,3\""
"(if you dont get any results it\n"
"means either you entered wrong numbers or there are no routes): ");
scanf("%d", &j);
if (i == j || i > 3 || j >3 || i < 0 || j < 0) {
printf("\nStart and finish nodes are same or wrong number(s) have"
" been entered. Please try \nagain.\n");
exit(1);
}
find_routes(i, j, route, route_temp, mark, graph);
system("pause");
}
請不要發佈您的電子郵件收集機器人。 –
不知道。我會編輯它謝謝。 – madkobra
「路由」對於格式爲「」 - >%d「'的4個步驟來說太小。至少要有14個字節。 – chqrlie