当前位置:首页 » 操作系统 » 8耶源码

8耶源码

发布时间: 2022-09-10 17:45:16

⑴ 八数码C++源代码

#include<cstdio>
#include<vector>
#include<queue>
#include<ctime>
#define maxhash 73939
#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[10][10];
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%10;
d/=10;
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%10;
if(d[i]==0) z=i;
s/=10;
}
return z;
}
ULL ToULL(int *d)
{
ULL ans=0;
for(int i=1;i<=9;i++)
ans=ans*10+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[10];
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<10)
{
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[10],to[10];
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

⑵ 计算机字长为8位,求-27的二进制源码和补码

概念:

负数的补码是:=>源码=>反码=>末尾+1=>得到补码!

-27:补码:

先看正27的源码:=>0001 1011

取反 :=>1110 0100 (反码)

末尾加1 :=>1110 0101 (这个就是-27的补码)

你也可以还原他!

补码末尾减1=>得到反码=>反码取反得到源码

其实负数在内存里面存在就是补码形式的存在的,你可以直接输出就能看到!

⑶ -8的补码是多少 为什么-1的反码是-126

楼主你好,我们先来看看反码的概念,简单的说,正数的反码与源码一致,负数的反码符号位不变,其他位按位取反.0可以理解为正,也可以理解为负,所以有两种表示.
你说-1的反码是-126,这是用8位2进制来表示一个数.第一位表示符号位,-1换算成2进制为10000001,根据反码的规则,它的反码为11111110,换算成10进制即为-126。用8位2进制来表示一个数的话,-8的源码为10001000,反码为11110111,换算成10进制为-119。希望可以帮到你!

⑷ Dreamweaver8怎么生成源代码

Dreamweaver8生成源代码方法步骤:

1、创建css样式,点击窗口css样式,可以打开css样式编辑窗口,还可以直接在属性面板内创建。

2、点击属性面板的编辑规则,或者是css样式窗口的+号就可以打开新建css规则对话框。

3、选择要创建的css样式的内容。比如要为段落更改样式。

4、在弹出的定义对话框中,选择要更改的各种属性。比如把段落的字体大小改为16px,字体颜色改为红色。

5、点击确定,发现段落中的文字就出现了相应的效果。在<head>中条件了css样式代码。

⑸ 源码是什么 为什么它前面会有那么多零 如果255要怎么表示8位都是1啊

为了区分。多个二进制是表示一个范围的数如果世界上只有一个数字,就不需要这么多二进制表示了。比如用8个二进制表示,也只能表示0~255如果要表示256以上,那么8个二进制也不够,还得增加,比如16个二进制数。另外,为了处理器处理方便,都是按找byte(8个二进制)或word(16个二进制)的倍数来增加的。

⑹ 这个网站源码在那里可以下载

直接在ie中点击
查看->源代码,源文件就出来啦。
或者收藏该网页,再把网页放到dreamweaver中,都可以看到网页的源代码

⑺ ie8浏览器中 如何查看选中部分源代码

你好,可以在IE窗口下按F12,打开开发人员工具,点击“查找”-“单击选择元素”,然后点击网页上的任意元素就可以了。

⑻ 八皇后c++源码讲解

回溯法:八皇后问题,一个经典问题

在程序设计中还有一种方法叫做"回溯法".他不是按照某种公式或确定的法则,求问题的解,而是通过试探和纠正错误的策略,找到问题的街.这种方法一般是从一个原始状态出发,通过若干步试探,最后达到目标状态终止.
回溯法在理论上来说,就是在一棵搜索树中从根结点出发,找到一条达到满足某条件的子结点的路径.在搜索过程中,对于每一个中间结点,他的位置以及向下搜索过程是相似的,因此完全可以用递归来处理.典型的例子就是着名的"八皇后问题".
"八皇后问题"是在国际象棋棋盘上放置八个皇后,使她们不能相吃.国际象棋中的皇后可以吃掉与她处于同一行,同一列,同一对角线上的棋子.因此每一行只能摆放一个皇后.因共有八行,所以每行有且只有一个皇后.
在本例中皇后的位置有一个一维数组来存放A(I)=J表示第I行皇后放在第J列.下面主要来看看怎么样判断皇后是否安全的问题.(1)首先,用一维数组来表示,已经解决了不在同一行的问题.(2)对于列可以引进一个标志数组C[J],若J列上已放了皇后,则C[J]=FALSE.(3)对于左上右下的对角线I-J为一常量,位于[-7,+7]之间,再此引入标志数组L[-7..7];对于左下右上的对角线,类似的有I+J等于常量,用数组R[2..16]来表示.当在第I行,第J列上放置了皇后,则只需设置:C[J]:=FALSE; L[I-J]:=FLASE; R[I+J]:=FALSE就可以解决皇后的安全问题了.

问题描述:在标准国际象棋的棋盘上(8*8格)准备放置8只皇后,我们知道,国际象棋中皇后的威力是最大的,她既可以横走竖走,还可以斜着走,遇到挡在她前进路线上的敌人,她就可以吃掉对手。要求在棋盘上安放8只皇后,使她们彼此互相都不能吃到对方,求皇后的放法。
/************************************************************************/
/* */
/* 问题:在8×8的国际象棋棋盘上放置8个皇后,要求任意两个皇后 */
/* 不能在同一行、同一列或同一条对角线上。 */
/* */
/* 本程序使用递归-回溯法求解8皇后问题。Visual C++ 6.0 调试通过。 */
/* 作者 晨星 2002年5月9日 */
/* */
/************************************************************************/
#include <stdio.h>
#include <conio.h>
#include <math.h>
#define QUEENS 8
//!记录解的序号的全局变量。
int iCount = 0;
//!记录皇后在各列上的放置位置的全局数组。
int Site[QUEENS];
//!递归求解的函数。
void Queen(int n);
//!输出一个解。
void Output();
//!判断第n个皇后放上去之后,是否有冲突。
int IsValid(int n);
/*----------------------------Main:主函数。 ----------------------------*/
void main()
{
//!从第0列开始递归试探。
Queen(0);
//!按任意键返回。
getch();
}
/*-----------------Queen:递归放置第n个皇后,程序的核心!----------------*/
void Queen(int n)
{
int i;
//!参数n从0开始,等于8时便试出了一个解,将它输出并回溯。
if(n == QUEENS)
{
Output();
return;
}

//!n还没到8,在第n列的各个行上依次试探。
for(i = 1 ; i <= QUEENS ; i++)
{
//!在该列的第i行上放置皇后。
Site[n] = i;
//!如果放置没有冲突,就开始下一列的试探。
if(IsValid(n))
Queen(n + 1);
}
}
/*------IsValid:判断第n个皇后放上去之后,是否合法,即是否无冲突。------*/
int IsValid(int n)
{
int i;
//!将第n个皇后的位置依次于前面n-1个皇后的位置比较。
for(i = 0 ; i < n ; i++)
{
//!两个皇后在同一行上,返回0。
if(Site[i] == Site[n])
return 0;
//!两个皇后在同一对角线上,返回0。
if(abs(Site[i] - Site[n]) == (n - i))
return 0;
}
//!没有冲突,返回1。
return 1;
}
/*------------Output:输出一个解,即一种没有冲突的放置方案。------------*/
void Output()
{
int i;
//!输出序号。
printf("No.%-5d" , ++iCount);
//!依次输出各个列上的皇后的位置,即所在的行数。
for(i = 0 ; i < QUEENS ; i++)
printf("%d " , Site[i]);
printf("n");
}

STL源代码
用了STL, 方法是一样的.
#include <iostream>
#include <string>
using namespace std;
void queen(const string t, const string s)
{
if (s=="") cout<<t<<endl;
else
for (int i=0; i<s.length(); i++) {
bool safe=true;
for (int j=0;j<t.length();j++) {
if (t.length()-j==abs(s[i]-t[j])) safe=false;
}
if (safe) queen(t+s[i], s.substr(0,i)+s.substr(i+1));
}
}
int main()
{
string s="01234567";
queen("",s);
system("PAUSE");
exit(EXIT_SUCCESS);
}

递归解八皇后问题
/*递归法解八皇后问题*/
/*作者黄国瑜,《数据结构(C语言版)》清华大学出版社*/
char Chessboard[8][8]; /*声明8*8的空白棋盘*/
int N_Queens(int LocX, int LocY, int Queens) /*递归*/
{
int i,j;
int Result=0;
if(Queens == 8)/*递归结束条件*/
return 1;
else if(QueenPlace(LocX,LocY))/*递归执行部分*/
{
Chessboard[LocX][LocY] = 'Q';
for(i=0;i<8;i++)
for(j=0;j<8;j++)
{
Result += N_Queens(i,j,Queens+1);
if(Result>0)
break;
}
if(Result>0)
return 1;
else
{
Chessboard[LocX][LocY] = 'X';
}
}
else
return 0;
}
int QueenPlace(int LocX,int LocY) /*判断传入坐标本身及入八个方向上是否有皇后*/
{
int i,j;
if(Chessboard[LocX][LocY] != 'X')
return 0;
for(j=LocY-1;j>=0;j--)
if(Chessboard[LocX][j] != 'X')
return 0;
for(j=LocY+1;j<8;j++)
if(Chessboard[LocX][j] != 'X')
return 0;
for(i=LocX-1;i>=0;i--)
if(Chessboard[i][LocY] != 'X')
return 0;
for(i=LocX+1;i<8;i++)
if(Chessboard[i][LocY] != 'X')
return 0;
i= LocX - 1;
j= LocY - 1;
while (i>=0&&j>=0)
if(Chessboard[i--][j--] != 'X')
return 0;
i= LocX + 1;
j= LocY - 1;
while (i<8&&j>=0)
if(Chessboard[i++][j--] != 'X')
return 0;
i= LocX - 1;
j= LocY + 1;
while (i>=0&&j<8)
if(Chessboard[i--][j++] != 'X')
return 0;
i= LocX + 1;
j= LocY + 1;
while (i<8&&j<8)
if(Chessboard[i++][j--] != 'X')
return 0;
return 1;
}
main() /*主程序*/
{
int i,j;
for(i=0;i<8;i++)
for(j=0;j<8;j++)
Chessboard[i][j] = 'X';
N_Queens(0,0,0);
printf("the graph of 8 Queens on the Chessboard.is:n");
for(i=0;i<8;i++)
for(j=0;j<8;j++)
{
if(Chessboard[i][j] == 'Q')
printf("(%d,%d)n",i,j);
}
getch();
}
/*********************************************************
*****************八皇后问题*******************************
************根据严书给的类c算法求得************************
*********************************************************/
#include<stdio.h>
#define N 8
int col=1,row=1,slash=1,bslash=1;
int a[N][N];
int p,q,k,l;
int num=0;
void trial(int i)
{
int j; /*注 意,这里的j 一定要设为内部变量*/
if(i==N)
{
num++;
for(k=0;k<N;k++)
{
for(l=0;l<N;l++)
{
if(a[k][l]==1)
printf("@");
else printf("*");
}
printf("n");
}
printf("nn");
getchar();
}
else
{
for(j=0;j<N;j++)
{
for(k=0;k<i;k++)
if(a[k][j]==1)
{
col=0;
break;
} /*列*/
p=i-1;
q=j+1;
while((p>=0)&&(q<N))
{
if(a[p][q]==1)
{
slash=0;
break;
}
p--;
q++;
}
p=i-1;
q=j-1; /*对角*/
while((p>=0)&&(q>=0))
{
if(a[p][q]==1)
{
bslash=0;
break;
}
p--;
q--;
} /*斜对角*/
if((col==1)&&(slash==1)&&(bslash==1)) /*条件判断*/
{
a[i][j]=1;
trial(i+1);
}
col=1;slash=1;bslash=1;
a[i][j]=0;
}
}
}
void main()
{
trial(0);
printf("%dn",num);
getchar();
}

热点内容
如何查看radmin密码 发布:2024-05-10 23:52:03 浏览:797
用云服务器搭建外网教学 发布:2024-05-10 23:31:10 浏览:385
edimax打印服务器设置ip 发布:2024-05-10 23:29:51 浏览:369
联通的网关初始密码是多少 发布:2024-05-10 23:16:57 浏览:718
哪个手机品牌综合配置好 发布:2024-05-10 22:54:45 浏览:882
怎么解绑手机号微信账号密码 发布:2024-05-10 22:49:42 浏览:719
龙芯机器可以cef编译吗 发布:2024-05-10 22:40:48 浏览:157
犀牛如何编程 发布:2024-05-10 22:35:54 浏览:306
php类递归 发布:2024-05-10 22:33:55 浏览:6
android连接ubuntu 发布:2024-05-10 22:30:15 浏览:406