91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

  • 大小: 8KB
    文件類型: .cpp
    金幣: 1
    下載: 1 次
    發布日期: 2021-06-12
  • 語言: C/C++
  • 標簽: 漢諾塔??

資源簡介

利用狀態空間法對漢諾塔定義狀態,用廣度優先的方法解決漢諾塔問題,人工智能.(屬于學校學習課程所做,非商業內容)

資源截圖

代碼片段和文件信息


#include?
#include?
#include
#include?
#include?

#define?FALSE?0
#define?TRUE?1

char?graph[10][43]={
{“?????????????????????????????????????????\n“}
{“?????????????????????????????????????????\n“}
{“???????|????????????|????????????|???????\n“}
{“???????|????????????|????????????|???????\n“}
{“???????|????????????|????????????|???????\n“}
{“???????|????????????|????????????|???????\n“}
{“???????|????????????|????????????|???????\n“}
{“???????|????????????|????????????|???????\n“}
{“???????|????????????|????????????|???????\n“}
{“-----------------------------------------\n“}
};

typedef?struct?QNode?{
int????data; //存放數據
struct?QNode?*next; //存放直接后繼的指針
}?QNode?*QueuePtr;

typedef?struct?{???//輔助隊列??廣度優先擴展時用到
QueuePtr?front;
QueuePtr?rear;
}?linkQueue;

/*?初始化隊列?*/
int?InitQueue(linkQueue?*Q)
{
/*?申請頭結點空間,賦值給頭/尾指針?*/
Q->rear?=?Q->front?=?(QueuePtr)malloc(sizeof(QNode));
if?(Q->front?==?NULL)
exit(-1);

Q->front->next?=?NULL; //頭結點的next域
return?TRUE;
}

/*?銷毀隊列?*/
int?DestroyQueue(linkQueue?*Q)
{
/*?整個鏈表(含頭結點)依次釋放
沒有像鏈表、棧等借助?QNode?*p?*q;?而直接借用了front和rear?*/
while?(Q->front)?{????//若鏈表為空,則循環不執行
Q->rear?=?Q->front->next;?//抓住鏈表的下一個結點
free(Q->front);
Q->front?=?Q->rear;
}

Q->rear?=?Q->front?=?NULL;
return?TRUE;
}

/*?判斷是否為空隊列?*/
int?QueueEmpty(linkQueue?Q)
{
/*?判斷front和rear指針是否相等?*/
if?(Q.front?==?Q.rear)
return?TRUE;
else
return?FALSE;
}

/*?元素入隊列?*/
int?EnQueue(linkQueue?*Q?int?e)
{
QueuePtr?p;

p?=?(QueuePtr)malloc(sizeof(QNode));
if?(p?==?NULL)
return?FALSE;

p->data?=?e;
p->next?=?NULL; //新結點的next必為NULL
Q->rear->next?=?p; //接在當前隊尾的后面
Q->rear?=?p; //指向新的隊尾

return?TRUE;
}

/*?元素出隊列?*/
int?DeQueue(linkQueue?*Q?int?*e)
{
QueuePtr?p;

/*?空隊列則返回?*/
if?(Q->front?==?Q->rear)?//用Q->front->next==NULL也可以
return?FALSE;

p?=?Q->front->next; //指向首元
Q->front->next?=?p->next; //front指向新首元,可能為NULL
/*?如果只有一個結點,則必須修改尾指針?*/
if?(Q->rear?==?p)
Q->rear?=?Q->front;

/*?返回數據并釋放結點?*/
*e?=?p->data;
free(p);

return?TRUE;
}

void?IsExist(int?*stateint?tnumint?numlinkQueue?&Q)
{
if?(state[tnum]?==?-1)
??{
?state[tnum]?=?num;
?EnQueue(&Q?tnum);
??}
}
/*?---------?圖像輸出函數集?------------?*/

void?PrintGraph()
{
system(“cls“);
printf(“過程演示:\n“);
int?i;
printf(“\n“);
for?(i=0;?i<10;?i++)
??printf(“%s“?graph[i]);
}

void?InitGraph(int?n)
{
int?ijk;
for?(i=0j=8;?i {
for(k=7-n+i;?k<=7+n-i;?k++)
??graph[j][k]=‘@‘;
}
}

void?Moveto(int?from?int?to?int?size)//from?to?只有012
{
//bool?moved=false;//判斷是否已移動
int?ijkmslen;
int?from1=from*13+7;
int?to1=to*13+7;?
for?(i=2;?i<9;?i++)//找到起始層
??if?(graph[i][from1+1]==‘@‘)//層數記錄
?? break;
??
for?(j=2;?j<=9;?j++)//找到目標層數
??if?(graph[j][to1+1]==‘@‘||graph[j][to1+1]==‘-‘)//層數記錄
?? {
?? j--;
?? break;

評論

共有 條評論