zoukankan      html  css  js  c++  java
  • HDU1195 BFS

    题意:从一个4位数到另一个4位数 所需的步数

    bfs

    View Code
     1 #include<stdio.h>
     2 #include<string>
     3 #include<stdlib.h>
     4 #include<queue>
     5 #include<algorithm>
     6 #include<iostream>
     7 #include<map>
     8 using namespace std;
     9 const int maxn = 10;
    10 char a[maxn],b[maxn];
    11 int vis[ 100000 ];
    12 struct node{
    13     char nn[maxn];
    14     int t;
    15 };
    16 
    17 int solve( char a,char b,char c, char d ){
    18     return (a-'0')*1+(b-'0')*10+(c-'0')*100+(d-'0')*1000;
    19 }
    20 
    21 int bfs(){
    22     queue<node>q;
    23     while( !q.empty() )
    24         q.pop();
    25     node now,next;
    26     memset( vis,0,sizeof( vis ));
    27     strcpy( now.nn,a );//now.nn=a;
    28     vis[ solve(a[0],a[1],a[2],a[3]) ]=1;
    29     now.t=0;
    30     q.push( now );
    31     while( !q.empty() ){
    32         now=q.front(),q.pop();
    33         //printf("now:%s\n",now.nn);
    34         if( solve(now.nn[0],now.nn[1],now.nn[2],now.nn[3]) == solve( b[0],b[1],b[2],b[3] ) )
    35             return now.t;
    36         //next.nn=now.nn;
    37         next.t=now.t+1;
    38         for( int i=0;i<4;i++ ){
    39             strcpy( next.nn,now.nn );//.nn=now.nn;
    40             if( next.nn[i]=='9' ){
    41                 next.nn[i]='1';
    42             }
    43             else{
    44                 next.nn[i]=now.nn[i]+1;
    45             }
    46             if( vis[ solve(next.nn[0],next.nn[1],next.nn[2],next.nn[3]) ]==0/*mp[ next.nn ]==0*/ ){
    47                 vis[ solve(next.nn[0],next.nn[1],next.nn[2],next.nn[3]) ]=1;
    48                 q.push( next );
    49             }
    50         }//add 1
    51         for( int i=0;i<4;i++ ){
    52             strcpy( next.nn,now.nn );//next.nn=now.nn;
    53             if( next.nn[i]=='1' ){
    54                 next.nn[i]='9';
    55             }
    56             else{
    57                 next.nn[i]=now.nn[i]-1;
    58             }
    59             if( vis[ solve(next.nn[0],next.nn[1],next.nn[2],next.nn[3]) ]==0/*mp[ next.nn ]==0*/ ){
    60                 vis[ solve(next.nn[0],next.nn[1],next.nn[2],next.nn[3]) ]=1;
    61                 q.push( next );
    62             }
    63         }
    64         char tmp;
    65         for( int i=1;i<4;i++ ){
    66             strcpy( next.nn,now.nn );//next.nn=now.nn;
    67             tmp=now.nn[i];
    68             next.nn[i]=now.nn[i-1];
    69             next.nn[i-1]=tmp;
    70             if( vis[ solve(next.nn[0],next.nn[1],next.nn[2],next.nn[3]) ]==0/*mp[ next.nn ]==0*/ ){
    71                 vis[ solve(next.nn[0],next.nn[1],next.nn[2],next.nn[3]) ]=1;
    72                 q.push( next );
    73             }
    74         }
    75     }
    76     return -1;
    77 }
    78 
    79 int main(){
    80     int ca;
    81     scanf("%d",&ca);
    82     while( ca-- ){
    83         scanf("%s%s",a,b);
    84         int ans=bfs();
    85         printf("%d\n",ans);
    86     }
    87     return 0;
    88 }
    keep moving...
  • 相关阅读:
    个人作业——软件产品案例分析
    软件工程结对作业二
    软件工程团队展示
    软件工程第三次作业
    软件工程实践第二次作业
    软件工程实践第一次作业
    第八次课程作业
    第五次课程作业
    第四次课程作业
    wind本地MySQL数据到hive的指定路径
  • 原文地址:https://www.cnblogs.com/xxx0624/p/2913183.html
Copyright © 2011-2022 走看看