poj-3126-Prime Path

呂振麒 bio photo By 呂振麒 Comment

傳送門:

Prime Path

題意:

一次改變一個digit,求起始到終點的距離。

思路:

BFS即可。

code:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
int T,M,N,K,I,a,b,c,ans,cnt, head, tail;
int visit[10000];
queue<int> que;
void init(){
  memset(visit, 0, sizeof(visit));
  cin >> head >> tail;
  que.push(head);
  visit[head] = 1;
}
stringstream ss;
string str,ts;
void sol(){
  int x, num;
  if(tail != head)
  while(!que.empty()){
    x = que.front();
    que.pop();
    ss.clear();
    ss << x;
    ss >> str;
    for(int i=0;i<10;i++){
      for(int j=0;j<4;j++)if(str[j]-'0' != i){
        ts = str;
        ts[j] = '0'+i;
        ss.clear();
        ss << ts;
        ss >> num;
        if(num == tail){
          cout << visit[x] << endl;
          while(!que.empty()) que.pop();
          return;
        }
        if(!visit[num] && is_pr(num)){
          visit[num] = visit[x]+1;
          que.push(num);
        }
      }
    }
  }
  cout << 0 << endl;
}
int main(){
  build();
  cin >> T;
  while(T--){
    init();
    sol();
  }
}
comments powered by Disqus