学习总结!

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位数变下去其次数不可能比上次开始的变换次数少。

cpp 复制代码
#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;
			else
				next1.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;
			else
				next1.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;
}
相关推荐
lvwangshu26 分钟前
图论:LCA、树的直径、树的重心、二分图与 Tarjan 缩点
算法·图论
爱吃苹果的日记本31 分钟前
数据结构第一课
c语言·数据结构·数据库·学习·c#
孫治AllenSun1 小时前
【LangChain4J-09】开发学习知识点
spring boot·后端·学习
302wanger1 小时前
干与湿:AI 拿走脑力之后,人剩下什么
算法
边境悍匪1 小时前
蜗牛学苑 Java 智能体学习 Day38|Spring AI Alibaba2 思维导图复盘
java·学习·spring
计算机编程-吉哥2 小时前
脑肿瘤MRI智能识别系统:基于深度学习的像素级脑肿瘤语义分割平台【计算机毕业设计选题推荐】
人工智能·python·深度学习·算法·毕业设计·课程设计·大数据毕业设计选题推荐
摘星星的屋顶2 小时前
2026年8月31日~2026年9月13日周报
人工智能·学习
用户204937554952 小时前
端侧语音部署踩坑:模型能跑不等于终端真的能用
后端·算法
shehuiyuelaiyuehao3 小时前
算法39,位运算,消失的两个数字
java·数据结构·算法
ZiLing3 小时前
2026 ROS 2 Lyrical 踩坑实录(一):编译与依赖——rosdep、现代 CMake 与 CMake 4.x
算法