2015-05-31 6 views
0

постановки задачи о: http://www.spoj.com/problems/NAKANJ/ МОЕГО РЕШЕНИЯ:Неожиданный выход из программы

#include<bits/stdc++.h> 
using namespace std; 
int x[10]={0,2,2,-2,-2,1,1,-1,-1}; 
int y[10]={0,1,-1,1,-1,2,-2,2,-2}; 
int bfs(int a1,int b1,int a2,int b2) 
{ 
    pair<int,int> p; 
    int i; 
    queue<pair<int,int> >q; 
    int moves[9][9],visit[9][9],m,n; 
    memset(moves,0,sizeof(moves)); 
    memset(visit,0,sizeof(visit)); 
    p.first=a1; 
    p.second=b1; 
    q.push(p); 
    moves[a1][b1]=0; 
    while(!q.empty()) 
    { 
     p=q.front(); 
     q.pop(); 
     if(p.first==a2&&p.second==b2) 
      return moves[a2][b2]; 
     for(i=1;i<=8;i++) 
     { 
      m=p.first+x[i]; 
      n=p.second+y[i]; 
      if(m>8||m<1||n>8||n<1) 
       continue; 
      else 
      { 
       visit[m][n]=1; 
       moves[m][n]=moves[p.first][p.second]+1; 
       q.push(make_pair(m,n)); 
      } 
     } 
    } 
} 
int main() 
{ 
    long long int t; 
    cin>>t; 
    while(t--) 
    { 
     string d,f; 
     cin>>d>>f; 
     int s=d[0]-'a';int r=f[0]-'a'; 
     cout<<bfs(s+1,(int)d[1],r+1,(int)f[1])<<endl; 
    } 
    return 0; 
} 

Input : 
3 
a1 h8 
a1 c2 
h8 c3 

output : 
-1217403904 
-1217403904 
-1217403904 

, что является причиной этого странного вывода. логика и реализация алгоритма кажутся мне прекрасными. любая помощь оценивается.

ответ

0

Функция bfs() достигает конца, пока ничего не возвращает, и ожидается, что она вернется int.

Это означает, что вы либо игнорируете предупреждения компилятора, либо заставляете их замолчать, в обоих случаях это плохая идея, включать предупреждения и слушать их, они говорят вам, что ваш код почти наверняка имеет ошибки.

Кроме того, не делайте этого

int s=d[0]-'a';int r=f[0]-'a'; 

это слишком низкое качество кода, что делает ваша программа alsmot невозможно понять, сделать это как этот

int s; 
int r; 

s = d[0] - 'a'; 
r = f[0] - 'a'; 
+0

Он возвращает обратные ходы [a2] [b2]; ', но может быть, эта строка не достигнута, idk – P0W

+0

Я вернул целое число в моей функции bfs. и эта линия в конечном итоге будет достигнута, я думаю. – Alex

+0

@SarvagyaAgarwal не угадывает тест и всегда использует запасную стоимость. –

1

Ваш moves массив имеет 9 строк и 9 столбцов -

int moves[9][9]; 

Пока вы возвращаете что-то из ходов, таких как thi s -

if(p.first==a2&&p.second==b2) 
    return moves[a2][b2]; 

сделать проверку, являются ли a2 и b2 меньше, чем 9 -

if(p.first==a2&&p.second==b2){ 
    if(a2 < 9 && b2 <9){ 
    return moves[a2][b2]; 
    } 
} 
+0

Это ничего не меняет. – Alex

0

Я думаю, что это, скорее всего, проблема:

Когда вы бросаете символ, который не является цифра, вы должны сделать:

int char_not_digit = char - 'a' ; 

и когда цифра на междунар,

int char_digit = char - '0'; 

Посмотрите на решение here

Таким образом, все 0th позиции символа во входной строке должен быть преобразован в int с вычитанием 'a' и все 1-е символ позиции в строке ввода должен быть преобразован в int путем вычитания '0'.

+0

спасибо! :), который работал: D – Alex

Смежные вопросы