2013-07-06 7 views
0

누군가 내 코드를 충돌시키는 까다로운 테스트 예제를 제공 할 수 있습니까? 작업 ->http://www.spoj.com/problems/SHOP/ 내 코드에서 실수를 찾을 수 없으므로 도움을 요청하고 있습니다. 코드 : http://pastebin.com/6wuFWWJHSpoj 쇼핑 잘못된 결과

#include <stdio.h> 
#include <queue> 
#include <algorithm> 
using namespace std; 
struct koord 
{ 
     int x; 
     int y; 
     koord(int _x=0,int _y=0) 
     { 
       x=_x; 
       y=_y; 
     } 
}; 
queue<koord>Q; 
bool bio[150][150]; 
int dx[]={0,0,1,-1}; 
int dy[]={1,-1,0,0}; 
int dist[150][150]; 
char polje[150][150]; 
int a,b; 
void bfs(int a1,int b1) 
{ 
    Q.push(koord(a1,b1)); 
    bio[a1][b1]=true; 
    while(!Q.empty()) 
    { 
         koord pos=Q.front(); 
         Q.pop(); 
         for(int i=0;i<4;++i) 
         { 
           koord dalje=koord(pos.x+dx[i],pos.y+dy[i]); 
           if(dalje.x>=0 && dalje.x<b && dalje.y>=0 && dalje.y<a) 
           { 
           if(polje[dalje.x][dalje.y]!='X' || polje[dalje.x][dalje.y]!='S') 
           if(bio[dalje.x][dalje.y]==false) 
           { 
            if(polje[dalje.x][dalje.y]=='D') 
            { 
             bio[dalje.x][dalje.y]=true; 
             dist[dalje.x][dalje.y]=dist[pos.x][pos.y]; 
             Q.push(dalje); 
            } 
            else 
            { 
            bio[dalje.x][dalje.y]=true; 
            dist[dalje.x][dalje.y]=dist[pos.x][pos.y]+(polje[dalje.x][dalje.y]-'0'); 
            Q.push(dalje); 
            } 
           } 
           if(polje[dalje.x][dalje.y]=='D' && dist[dalje.x][dalje.y]>dist[pos.x][pos.y]) 
           { 
            dist[dalje.x][dalje.y]=dist[pos.x][pos.y]; 
            Q.push(dalje);      
           } 
           else if(dist[dalje.x][dalje.y]>dist[pos.x][pos.y]+(polje[dalje.x][dalje.y]-'0')) 
           { 
            dist[dalje.x][dalje.y]=dist[pos.x][pos.y]+(polje[dalje.x][dalje.y]-'0'); 
            Q.push(dalje); 
           } 
           } 
         } 
    } 
} 
int main() 
{ 
    scanf("%d%d",&a,&b); 
    while(a!=0 && b!=0) 
    { 
       int c=0,d=0,e=0,f=0; 
       for(int i=0;i<b;++i)scanf("%s",polje[i]); 
       //scanf("\n"); 
       for(int i=0;i<b;++i) 
       for(int j=0;j<a;++j) 
       { 
         if(polje[i][j]=='S'){c=i;d=j;} 
         if(polje[i][j]=='D'){e=i;f=j;} 
       } 
       bfs(c,d); 
       printf("%d\n",dist[e][f]); 
       for(int i=0;i<150;++i) 
       for(int j=0;j<150;++j){bio[i][j]=false;dist[i][j]=0;} 
       Q.empty(); 
       scanf("%d%d",&a,&b); 
    } 
    return 0; 
} 

내가 좋아하는 몇 가지 이상한 테스트 예를보십시오 : S9D 1X1 (111) 하지만 내 프로그램 인쇄 (5), 그것은 좋다. 그래서 네 도움이 필요해.

+1

당신은 질문에 코드를 게시해야해야한다. 즉, 작은 예제로 잘라내어 복사/붙여 넣기/컴파일하고 문제를 볼 수 있습니다. 질문에 대한 오류도 추가해야합니다. – BoBTFish

+0

main에 첫 번째 for 루프에 대한 시작 및 끝 중괄호를 넣는 것을 잊었습니까? –

+0

그 진술을 명확하게 – Dario

답변

0

실수는 여기에 있었다 :

if(polje[dalje.x][dalje.y]!='X' || polje[dalje.x][dalje.y]!='S') 

그것은

if(polje[dalje.x][dalje.y]!='X' && polje[dalje.x][dalje.y]!='S')