java目前学习到了类的实例化:
类:描述一种事物的定义,是抽象的概念
实例:该事物的一个具体的个体,是具体的东西
举例:
世界上人很多,可以定义一个Person类:
Public Person
{Public String Name {get; set;}Public String Age {get; set;}
}
这是类的创建。
每个人又是有区别的,那我们就可以根据Person类来创建不同的人,比如说:
Person p1 = New Person() { Name = "A", Age = "22" }
Person p2 = New Person() { Name = "B", Age = "23" }
这就是类的实例化。
用类的定义来创建一个实例,就叫做类的实例化。
用new语句创建对象,这是最常见的创建对象的方法。
算法题:
输入测试用例数t,每个例子包括两个4个数字的整数(由1到9组成),一个为源,另外一个为目标。每次可以将其中任何一个数字+1或者-1运算,并且规定1-1=9,9+1=1;也可以将相邻2位数进行交换。问最少需要变换几次,才能从源变为目标 该问题可以用BFS来解决。在BFS搜索过程中,出现过的4位数就不必再试探了,因为再用这个4位数变下去其次数不可能比上次开始的变换次数少。
#include<iostream>
#include<cstring>
#include<queue>
using namespace std;
char str[2][5];
int target[4];
struct node{int step;int a[4];
};
bool vis[10][10][10][10];
int bfs()
{node now,next1;for(int i=0;i<4;i++){target[i]=str[1][i]-'0';now.a[i]=str[0][i]-'0';}memset(vis,false,sizeof(vis));queue<node>q;now.step=0;q.push(now);bool flag;while(q.size()){node now=q.front();q.pop();flag=true;for(int i=0;i<4;i++){if(now.a[i]!=target[i]){flag=false;break;}}if(flag){return now.step;}for(int i=0;i<4;i++){next1=now;if(now.a[i]==9)next1.a[i]=1;elsenext1.a[i]=now.a[i]+1;if(!vis[next1.a[0]][next1.a[1]][next1.a[2]][next1.a[3]]){vis[next1.a[0]][next1.a[1]][next1.a[2]][next1.a[3]]=true;next1.step=now.step+1;q.push(next1);}}for(int i=0;i<4;i++){next1=now;if(now.a[i]==1)next1.a[i]=9;elsenext1.a[i]=now.a[i]-1;if(!vis[next1.a[0]][next1.a[1]][next1.a[2]][next1.a[3]]){vis[next1.a[0]][next1.a[1]][next1.a[2]][next1.a[3]]=true;next1.step=now.step+1;q.push(next1);}}for(int i=0;i<3;i++){next1=now;next1.a[i]=now.a[i+1];next1.a[i+1]=now.a[i];if(!vis[next1.a[0]][next1.a[1]][next1.a[2]][next1.a[3]]){vis[next1.a[0]][next1.a[1]][next1.a[2]][next1.a[3]]=true;next1.step=now.step+1;q.push(next1);}}}return -1;
}
int main()
{int t;cin>>t;while(t--){cin>>str[0]>>str[1];cout<<bfs()<<endl;}return 0;
}