Gym

来源:互联网 发布:网络最新骗术扒人 编辑:程序博客网 时间:2024/05/20 01:36

http://codeforces.com/gym/101503/my
给定一个遥控器,给你若干个选项。
要求你从a到b,找到最小的次数。
直接暴力搜索。
发现有总共四种方式。
①单独按键
② 用输出二位数
③ 加
④ 减。
注意一个问题,这个广搜是有顺序的。
即先 ①再③④ 再 ②,这样可以保证每次得到的都是最小的次数。

并且这道题广搜里面的顺序,如果换一下,就错了。。
我开始以为这个顺序能保证 次数最少,所以我就直接没对结果取min。
但是这样是错的。
大概广搜的思路是。
首先的状态是 原数,个数。
然后用+和-。二位数。

#include <bits/stdc++.h>using namespace std;/* 方法:直接模拟。*/const int maxn=104;bool vis[maxn];int a[13];int ans;void bfs(int s,int t){     queue<pair<int,int> >q;     q.push(make_pair(s,0));    for(int i=0;i<=9;i++){               if(!vis[i]&&a[i]){                 q.push(make_pair(i,1));                vis[i]=true;               }           }     vis[s]=true;     while(!q.empty()){           pair<int,int>u=q.front();           vis[u.first]=true;           vis[t]=false;           q.pop();           if(u.first==t){             ans=min(ans,u.second);             vis[t]=false;             continue;           }           if(u.first==99&&!vis[0]&&a[10])               q.push(make_pair(0,u.second+1));           else if(!vis[u.first+1]&&a[10])               q.push(make_pair(u.first+1,u.second+1));           if(u.first==0&&!vis[99]&&a[11])               q.push(make_pair(99,u.second+1));           else  if(!vis[u.first-1]&&a[11])               q.push(make_pair(u.first-1,u.second+1));                 for(int i=0;i<=9;i++){               for(int j=0;j<=9;j++){                   if(!vis[i*10+j]&&a[12]&&a[i]&&a[j])                      q.push(make_pair(i*10+j,u.second+3));               }           }     }}int main(){   int a1,b1;    while(cin>>a[1]){          memset(vis,false,sizeof(vis));         for(int i=2;i<=3;i++)             cin>>a[i];         cin>>a[10];         for(int i=4;i<=6;i++)            cin>>a[i];         cin>>a[11];         for(int i=7;i<=9;i++)            cin>>a[i];         cin>>a[12];         cin>>a[0];         scanf("%d%d",&a1,&b1);         ans=1e6;         //cout<<"!!"<<endl;         bfs(a1,b1);         if(ans!=1e6)         printf("%d\n",ans);         else            puts("-1");   }    return 0;}

}
“`

原创粉丝点击