아무도 도와 줄 수 있습니까? 그것은 나에게 잘못된 번호를 제공합니다. matrix [i] [j] .spath는 올바른 값으로 채워지지만 어떤 두 노드 사이의 최단 경로를 반환 할 때 잘못된 숫자를줍니다. 컴파일러는 나에게이함수가 잘못된 숫자를 반환합니까?
경고를 제공합니다 : 컨트롤이 void 이외의 기능
의 끝에 도달하지만 만약 문 제가 끝이 항상 return 문을 수행 도달 여부를 확인할 경우, 나는 때문에 main()에 끝 좌표를 설정합니다. 하지만 나는 return 1을 추가하거나 정확한 결과를주는 함수의 끝에서 아무 것도 반환 할 때 알아 차렸다. 이것은 일종의 규칙인가? 나는 어디에서 if 문을 가지고 있고 거기에 return 문만을 가지고 있고 문제없이 작동하는 함수를 작성했다. 감사합니다 :) 경고에 대한
#include <iostream>
#include <queue>
using namespace std;
struct node
{
int x,y,spath,val;
}v,c;
node mat[100][100];
int dy[] = {-1,1,0,0}, dx[] = {0,0,-1,1}, n, m;
void input()
{
cin >> n >> m;
for (int i=0; i<n; i++) {
for (int j=0; j<m; j++) {
cin >> mat[i][j].val;
mat[i][j].spath = 0;
}
}
}
int shortest_path(node start, node end)
{
queue<node> q;
q.push(start);
mat[start.y][start.x].val = 1;
while (!q.empty())
{
v = q.front();
q.pop();
for (int i=0; i<4; i++) {
c.y = v.y + dy[i];
c.x = v.x + dx[i];
if (c.y == end.y && c.x == end.x) {
return mat[v.y][v.x].spath + 1;
}
else if (c.y >=0 && c.y < n && c.x >=0 && c.x < m && mat[c.y][c.x].val == 0)
{
mat[c.y][c.x].val = 1;
mat[c.y][c.x].spath = mat[v.y][v.x].spath + 1;
q.push(c);
}
}
}
}
int main()
{
node start,end;
start.x = start.y = 0;
end.y = end.x = 4;
input();
cout << shortest_path(start,end) << endl;
return 0;
}
출력이 어떻게 되겠습니까? 'shortest_path'가 돌아올 것이라고 생각합니까? –
shortest_path (노드 시작, 노드 끝)의 끝에서 의미있는 것을 반환해야합니다. 처음부터 끝까지 경로가없는 경우 어떻게됩니까? (예 : cin은 mat [] []. val에 대해 0이 아닌 작은 대각선을 제공합니다.))? 그런 다음 정의되지 않은 값으로 shortest_path에서 빠져 나옵니다. – Tobias
어떤 컴파일러/플랫폼을 사용하고 있습니까? g ++/linux를 사용하여 올바르게 작동하는 것 같습니다. – LeGEC