Thursday, August 29, 2013

UVA 12160 Unlock the Lock

Problem Link
Problem Type : BFS.
Difficulty Level : 5(uHUNT)
Author : Imdad.

Here, is the c++ implementation of this problem.
 
#include <cstdio>
#include <queue>

using namespace std;

typedef struct{
 int val;
 int step;
}node;

int main(){
 int i,button[11],tmp,cas = 1,s,f,b,visited[10000];
 bool found;
 
 node current,new_node;

 while(scanf("%d %d %d", &s, &f, &b ) && !(!s && !f && !b)){
  queueQ;
  found = false;

  for(i = 0; i < 10000; i++)
   visited[i] = 0;
  for(i = 0; i < b; i++)
   scanf("%d", &button[i]);

  current.val = s;
  current.step = 0;
  visited[current.val] = 1;
  Q.push(current);

  while(!Q.empty()){
   current = Q.front();
   Q.pop();

   if(current.val == f){
    found = true;
    printf("Case %d: %d\n", cas++, current.step);
   }

   for(i = 0; i < b; i++){
    tmp = (current.val % 10000 + button[i] % 10000) % 10000;
    if(!visited[tmp]){
     new_node.val = tmp;
     new_node.step = current.step + 1;
     Q.push(new_node);
     visited[tmp] = 1;
    }
   }
  }
  if(!found)
   printf("Case %d: Permanently Locked\n",cas++);

 }


 return 0;
}

No comments:

Post a Comment