當前位置:首頁 » 操作系統 » 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();
}

熱點內容
arm編譯添加驅動 發布:2024-05-21 02:02:28 瀏覽:475
安卓設置頁面是怎麼 發布:2024-05-21 01:32:51 瀏覽:520
學生成績管理系統資料庫設計 發布:2024-05-21 01:14:41 瀏覽:42
我的世界什麼指令直接出現伺服器 發布:2024-05-21 01:10:00 瀏覽:397
星等演算法 發布:2024-05-21 00:53:06 瀏覽:509
李興華的java視頻 發布:2024-05-21 00:49:55 瀏覽:605
資料庫4種索引類型 發布:2024-05-21 00:47:29 瀏覽:241
給伺服器添加另一個ip 發布:2024-05-21 00:40:37 瀏覽:821
搭建ftp伺服器出現微軟藍屏 發布:2024-05-21 00:35:18 瀏覽:369
ftp怎麼加照片 發布:2024-05-21 00:14:37 瀏覽:623