八数码C++源代码
#include<cstdio>
#include<vector>
#include<queue>
#include<ctime>
#define maxhash
#define hash(x) x%maxhash
using namespace std;
typedef unsigned long long ULL;
vector<ULL>list[maxhash];
vector<int>dist[maxhash];
inline int abs(int x)
{
return x<0?数码数码-x:x;
}
int hval[][];
void fill_hval(int *d)
{
for(int i=0;i<=8;i++)//number i
{
int pos;
for(int k=1;k<=9;k++)//i's position
if(d[k]==i)
{
pos=k;
break;
}
for(int j=1;j<=9;j++)
{
hval[i][j]=abs((j-1)/3-(pos-1)/3)+abs((j-1)%3-(pos-1)%3);
}
}
}
int h(ULL d)
{
int answer=0;
for(int i=9;i>=1;i--)
{
int x=d%;
d/=;
answer+=hval[x][i];
}
return answer;
}
int ToARR(ULL s,int *d)
{
int z=0;
for(int i=9;i>=1;i--)
{
d[i]=s%;
if(d[i]==0) z=i;
s/=;
}
return z;
}
ULL ToULL(int *d)
{
ULL ans=0;
for(int i=1;i<=9;i++)
ans=ans*+d[i];
return ans;
}
void insert(ULL x,int di)
{
ULL hx=hash(x);
list[hx].push_back(x);
dist[hx].push_back(di);
}
int find(ULL x)
{
ULL hx=hash(x);
int size=list[hx].size();
for(int i=0;i<size;i++)
if(x==list[hx][i]) return dist[hx][i];
return -1;
}
inline void swap(int &x,int &y)
{
int t=x;
x=y;
y=t;
}
struct state{
int step;
ULL x;
friend bool operator <(state a,state b)
{
return a.step>b.step;
}
};
int cnt=0;
void AStar(int *from,int *to)
{
priority_queue<state>q;
ULL x=ToULL(from);
ULL y=ToULL(to);
fill_hval(to);
q.push((state){ h(x),x});
insert(x,0);
int d[];
while(!q.empty())
{
cnt++;
state s=q.top();
ULL i=s.x; q.pop();
int step=find(i);
int z=ToARR(i,d);
//printf("%lld %d %d\n",i,step,z);
if(i==y) return;
if(z-3>0)
{
swap(d[z],d[z-3]);
ULL j=ToULL(d);
swap(d[z],d[z-3]);
if(find(j)!=-1) goto out1;
q.push((state){ step+h(j),j});
insert(j,step+1);
}
out1:
if(z+3<)
{
swap(d[z],d[z+3]);
ULL j=ToULL(d);
swap(d[z],d[z+3]);
if(find(j)!=-1) goto out2;
q.push((state){ step+h(j),j});
insert(j,step+1);
}
out2:
if(z%3!=0)
{
swap(d[z],d[z+1]);
ULL j=ToULL(d);
swap(d[z],d[z+1]);
if(find(j)!=-1) goto out3;
q.push((state){ step+h(j),j});
insert(j,step+1);
}
out3:
if(z%3!=1)
{
swap(d[z],d[z-1]);
ULL j=ToULL(d);
swap(d[z],d[z-1]);
if(find(j)!=-1) continue;
q.push((state){ step+h(j),j});
insert(j,step+1);
}
}
}
int from[],to[];
void work()
{
for(int i=1;i<=9;i++)
scanf("%d",&from[i]);
for(int i=1;i<=9;i++)
scanf("%d",&to[i]);
AStar(from,to);
ULL y=ToULL(to);
printf("%d ",find(y));
#ifdef DEBUG
printf("%d ",clock());
printf("%d ",cnt);
#endif
}
int main()
{
#ifdef DEBUG
freopen("debug.in","r",stdin);
freopen("debug.out","w",stdout);
#endif
work();
return 0;
}
这是基于曼哈顿距离的估价函数的Astar
恺英网络登陆CCGEXPO,人气IP与VR新游集体亮相
7月4日7月7日,源码源码为期四天的数码数码“第二十届中国国际动漫游戏博览会CCG EXPO ”在上海展览中心火热开展。作为国内知名游戏互联网公司,源码源码同时也是数码数码CCG EXPO的常客,此次恺英网络携《数码宝贝:源码》《关于我转生变成史莱姆这档事:新世界》《Mecha Party》等项目线下亮相,源码源码同时旗下IP《百工灵》《岁时令》《KINGNET FAMILY》与数字资产平台“拾元立方”也组队参展开启各类福利活动,数码数码带着全新的源码源码产品与热情再次与各位动漫届粉丝共享CCG EXPO这场狂欢的动漫庆典。今年5月底开启预约的数码数码新游《数码宝贝:源码》首次在CCG线下曝光,展区设置了还原游戏场景的打卡装置,亚古兽、加布兽、迪路兽、保卫萝卜游戏源码巴鲁兽等耳熟能详的数码宝贝悉数登场,格外吸睛,引得众多玩家驻足围观拍照,现场还设置有游戏体验区,玩家可抢先试玩游戏,作为被选召者提前出发冒险!
《数码宝贝:源码》是由东映动画正版授权,万代南梦宫(上海)娱乐有限公司联合恺英网络共同开发的次世代数码宝贝冒险手游。研发团队采用次世代PBR写实风格数码宝贝和奇幻数码世界搭配的设计理念,期待能带给被选召者们耳目一新的成人用品招牌源码沉浸体验。
CCG现场还为玩家们奉上了超多惊喜福利,扫码预约并参与抽奖活动就有机会获得正版手办和游戏原创周边,来恺英网络展台现场打卡,一起传送去那个神秘的“数码世界”吧!
正在火热预约中的正版IP游戏《关于我转生变成史莱姆这档事:新世界》展区也迎来与玩家的面对面互动,展区内超多史莱姆出没,利姆鲁与诸多人气角色的身影吸引各位转生者大人前来聚会,玩家可以挑战完成限时任务赢取周边礼品,预约游戏更有机会获得正版角色手办。
《关于我转生变成史莱姆这档事:新世界》是房卡源码合集一款魔国建设策略手游,由超人气动画《关于我转生变成史莱姆这档事》正版IP授权,以利姆鲁的苏醒为故事开端,众多人气角色悉数登场,再现动画人气角色战斗名场面,与你一起从村落开始自由建造利姆鲁的理想王国!游戏预计将于今年夏天正式上线。
于今年初正式登录PlayStation海外服与Steam平台的自研VR游戏《Mecha Party(机甲派对)》亮相CCG现场,这是该游戏首次在国内公开展出,并在展区内设置了VR游戏体验区,抢先体验还未公开发布的考前测评系统源码全新Meta quest3版本。现场掀起VR热,不少玩家戴上VR穿戴设备,在?沉浸式全景漫游中体验休闲爽快的2v2机甲激战,在虚拟世界中感受身临其境的感觉。
《Mecha Party》是由恺英网络原创自研VR版MOBA类多人竞技游戏,玩家化身机甲爱好者,在VR第一人称座舱中驾驶各种诙谐的机甲,单人或组队进行强社交的MOBA竞技,最多支持3v3在线对战。今年3月海外上线后获得了来自世界各地VR游戏爱好者的广泛好评,而现场体验的Meta quest3版本将于今年暑期正式与玩家见面,届时将有更多的VR爱好者一起加入机甲大战的狂欢派对。
自研IP《百工灵》《岁时令》与数字资产平台《拾元立方》也在本次漫展中悉数亮相,涵盖手办、服饰、原创内容、周边等多个类型,通过小说、漫画、动画、游戏、文创产品等综合载体在年轻人当中普及与传播中华传统文化。同时吉祥物品牌《KINGNET FAMILY》再度开启线下一番赏活动,各类精美周边抽不停。
爆款产品、趣味互动、奖励丰厚,现场还有更多福利内容等待玩家探索,锁定中央大厅C,更多精彩体验,由你现场揭秘!
C语言 单片机,求一份TLC的源码,要带详细注释的,基础不太好,自己写的搜到的到没关系,在线等
#include <reg.h>
#include <math.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
#define INBUF_LEN 6 //数据长度
unsigned char inbuf1[INBUF_LEN]={ '0','0','0','0','0','0'};//发送缓冲区
unsigned char code table[] = { 0xc0,0xf9,0xa4,0xb0,0x,0x,0x,0xf8,0x,0x,0x,0x,0xc6,0xa1,0x,0x8e};//共阳数码管显示0~F
unsigned char code dis_8[]={ '0','1','2','3','4','5','6','7','8','9',' ','-'};
sbit CS=P2^5; //定义片选信号IO口
sbit SCLK=P2^4; //定义时钟信号IO口
sbit DIN=P2^3; //定义数据输入IO口
uint temp;
void init_serialcomm( void )
{
SCON = 0x ; //SCON: serail mode 1, 8-bit UART, enable ucvr
T2CON=0x;
TH2=0x;
TL2=0x;
RCAP2H=0xFF;
RCAP2L=0xDC;
TR2=1;
}
//向串口发送一个字符
void send_char_com( unsigned char ch)
{
SBUF=ch;
while (TI== 0 );
TI= 0 ;
}
//向串口发送一个字符串,strlen 为该字符串长度
void send_string_com( unsigned char *str, unsigned int strlen)
{
unsigned int k= 0 ;
do
{
send_char_com(*(str + k));
k++;
} while (k < strlen);
}
void delay(uint k) //延时函数
{
uint i,j;
for(i=0;i<k;i++){
for(j=0;j<;j++)
{ ;}}
}
//实现DA转换
void DAConvert(uint Data){
uchar i;
Data<<=6;
CS=0;
SCLK=0;
for (i=0;i<;i++){
DIN=(bit)(Data&0x);
SCLK=1;
Data<<=1;
SCLK=0;
}
CS=1;
SCLK=0;
for (i=0;i<;i++);
}
//定时器0中断处理中键扫描和显示
void KeyAndDis_Time0(void) interrupt 1 using 2
{
TH0=0xdc;
TL0=0x;//设定时值为ms
P0= table[ temp/];
P2=0x;
delay(2);
P0= table[ (temp%)/];
P2=0x;
delay(2);
P0= table[ (temp%)/];
P2=0x;
delay(2);
P0= table[ temp%];
P2=0x;
delay(2);
}
//主程序
main(){
uint i;
init_serialcomm(); //初始化串口
EA = 1; //允许CPU中断
ET0 = 1; //定时器0中断打开
TMOD = 0x; //设定时器0为模式1,位模式
TH0=0xdc;
TL0=0x; //设定时值为ms
TR0 = 1;
while(1){
for(i=;i<;i+=2){
DAConvert(i);//启动转换
temp=i;
inbuf1[0]=dis_8[temp/];
inbuf1[1]=dis_8[(temp%)/];
inbuf1[2]=dis_8[(temp%)/];
inbuf1[3]=dis_8[temp%];
inbuf1[4]=0x0d;
inbuf1[5]=0;
send_string_com(inbuf1,INBUF_LEN);//串口输出到上位机
delay(1);
}
for(i=;i>;i-=2){ DAConvert(i);//启动转换
temp=i;
inbuf1[0]=dis_8[temp/];
inbuf1[1]=dis_8[(temp%)/];
inbuf1[2]=dis_8[(temp%)/];
inbuf1[3]=dis_8[temp%];
inbuf1[4]=0x0d;
inbuf1[5]=0;
send_string_com(inbuf1,INBUF_LEN);
delay(1);
}
}
}
希望对你有帮助。
2024-12-28 23:56
2024-12-28 23:48
2024-12-28 23:46
2024-12-28 22:19
2024-12-28 22:16