HDU1548(검색)

1321 단어
/**
* BFS
*DP를 사용하여 해결할 수도 있지만 DP를 잘못 배웠습니다.시도 안 함
*/
#include<stdio.h>
#include<queue>

using namespace std;

int flag[210],data[210];
//flag                   。               。
//       
int N,A,B;

struct Node{
    int cur;//        
    int num;//  
};
//BFS
int search(){
    Node t,temp;
    t.cur=A;
    t.num=0;
    queue<Node> Q;
    Q.push(t);
    flag[A]=1;
    int up,down;
    while(!Q.empty()){
        temp = Q.front();
        Q.pop();
        if(temp.cur==B)return temp.num;//    ,    
        up=temp.cur+data[temp.cur];//  
        if(flag[up]==0 && up<=N){//       
            flag[up]=1;
            t.cur=up;
            t.num=temp.num+1;
            Q.push(t);
        }
        down=temp.cur-data[temp.cur];//  
        if(flag[down]==0 && down>0){//       
            flag[down]=1;
            t.cur=down;
            t.num=temp.num+1;
            Q.push(t);
        }
    }
    return -1;//    
}

int main(){
    int i;
    while(scanf("%d",&N)&&N){
        memset(flag,0,sizeof(flag));
        scanf("%d%d",&A,&B);
        for(i=1;i<=N;i++){
            scanf("%d",&data[i]);
        }
        printf("%d
",search()); } return 0; }

좋은 웹페이지 즐겨찾기