实验三算法与分析设计汇编文档格式.docx

上传人:b****5 文档编号:18691562 上传时间:2022-12-31 格式:DOCX 页数:14 大小:165.74KB
下载 相关 举报
实验三算法与分析设计汇编文档格式.docx_第1页
第1页 / 共14页
实验三算法与分析设计汇编文档格式.docx_第2页
第2页 / 共14页
实验三算法与分析设计汇编文档格式.docx_第3页
第3页 / 共14页
实验三算法与分析设计汇编文档格式.docx_第4页
第4页 / 共14页
实验三算法与分析设计汇编文档格式.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

实验三算法与分析设计汇编文档格式.docx

《实验三算法与分析设计汇编文档格式.docx》由会员分享,可在线阅读,更多相关《实验三算法与分析设计汇编文档格式.docx(14页珍藏版)》请在冰豆网上搜索。

实验三算法与分析设计汇编文档格式.docx

评分标准

分值

得分

合计

上机表现

积极出勤、遵守纪律

主动完成实验设计任务

30分

实验报告

及时递交、填写规范

内容完整、体现收获

70分

说明:

 

评阅教师:

日期:

年月日

实验内容

例2.走迷宫问题

迷宫是许多小方格构成的矩形,如图所示,在每个小方格中有的是墙(图中的“1”)有的是路(图中的“0”)。

走迷宫就是从一个小方格沿上、下、左、右四个方向到邻近的方格,当然不能穿墙。

设迷宫的入口是在左上角(1,1),出口是右下角(8,8)。

根据给定的迷宫,找出一条从入口到出口的路径。

1,1

1

8,8

代码:

#include<

stdio.h>

intmaze[8][8]={

{0,0,0,0,0,0,0,0},

{0,1,1,1,1,0,1,0},

{0,0,0,0,1,0,1,0},

{0,1,0,0,0,0,1,0},

{0,1,0,1,1,0,1,0},

{0,1,0,0,0,0,1,1},

{0,1,0,0,1,0,0,0},

{0,1,1,1,1,1,1,0}};

intfx[4]={1,-1,0,0},fy[4]={0,0,-1,1};

struct

{

intx,y,pre;

}sq[100];

intqh,qe,i,j,k;

check(inti,intj);

voidsearch();

voidout();

voidmain()

search();

printf("

\n"

);

}

voidsearch()

qh=0;

qe=1;

maze[0][0]=-1;

sq[0].pre=0;

sq[0].x=0;

sq[0].y=0;

while(qh!

=qe)

{

qh=qh+1;

for(k=0;

k<

4;

k++)

{

i=sq[qh].x+fx[k];

j=sq[qh].y+fy[k];

if(check(i,j)==1)

qe=qe+1;

sq[qe].x=i;

sq[qe].y=j;

sq[qe].pre=qh;

maze[i][j]=-1;

if(sq[qe].x==7&

&

sq[qe].y==7)

{

out();

return;

}

}

}

nonsolution.\n"

check(inti,intj)

intflag=1;

if(i<

0||i>

7||j<

0||j>

7)

flag=0;

if(maze[i][j]==1||maze[i][j]==-1)

return(flag);

voidout()

(%d,%d)"

sq[qe].x,sq[qe].y);

while(sq[qe].pre!

=0)

qe=sq[qe].pre;

printf("

——(%d,%d)"

}

用例:

例4

有如图所示的七巧板,试设计算法,使用至多4种不同的颜色对七巧板进行涂色(每块涂一种颜色),要求相邻区域的颜色互不相同,打印输出所有可能的涂色方案。

#include"

stdio.h"

intdata[7][7]={{0,1,0,0,1,0,1},{1,0,0,1,0,1,0},

{0,0,0,1,0,0,1},{0,1,1,0,0,1,1},

{1,0,0,0,0,0,1},{0,1,0,1,0,0,0},

{1,0,1,1,1,0,0}},n,color[7],total;

voidtre(ints);

intcolorsame(ints);

intj;

for(j=0;

j<

7;

j++)

color[j]=0;

total=1;

tre(0);

\nTotal=%d\n"

total-1);

voidtre(ints)

inti;

if(s>

6)

out();

else

for(i=1;

i<

=4;

i++)

color[s]=i;

if(colorsame(s)==0)

tre(s+1);

intcolorsame(ints)

inti,flag;

flag=0;

for(i=0;

i<

=s-1;

if(data[i][s]==1&

color[i]==color[s])

flag=1;

\nserialnumber:

%d\t"

total);

for(i=0;

=6;

i++)

color[i]);

total=total+1;

例7马的遍历问题

在n*m的棋盘中,马只能走日字。

马从位置(x,y)处出发,把棋盘的每一点都走一次,且只走一次,找出所有路径

代码:

intn=5,m=4;

intfx[8]={1,2,2,1,-1,-2,-2,-1},fy[8]={2,1,-1,-2,-2,-1,1,2},a[5][4];

intdep,x,y,count;

voidoutput();

intcheck(intxx,intyy);

voidfind(intx,inty,intdep);

inti,j;

count=0;

dep=1;

X,Y坐标:

"

scanf("

%d,%d"

&

x,&

y);

if(x>

n||y>

m||x<

0||y<

0)

x,yerror!

!

return;

for(i=0;

n;

for(j=0;

m;

a[i][j]=0;

a[x][y]=1;

find(x,y,2);

if(count==0)

printf("

nosolution!

else

voidfind(intx,inty,intdep)

inti,xx,yy;

8;

xx=x+fx[i];

yy=y+fy[i];

if(check(xx,yy)==1)

a[xx][yy]=dep;

if(dep==m*n)

output();

else

find(xx,yy,dep+1);

a[xx][yy]=0;

voidoutput()

count++;

count=%d"

count);

for(y=0;

y<

y++)

for(x=0;

x<

x++)

%4d"

a[y][x]);

printf("

intcheck(intxx,intyy)

intf=1;

if(xx>

=n||yy>

=m||xx<

0||yy<

0)

f=0;

elseif(a[xx][yy]!

returnf;

例12

按排列树搜索解决8皇后问题

inta[100],n,s=0,c[100],d[20];

voidswap(intt1,intt2);

voidTry(intt);

voidTry(intt)

if(t>

n)

output();

else

for(j=t;

=n;

swap(t,j);

if(c[t+a[t]]==0&

d[t-a[t]+n]==0)

c[t+a[t]]=1;

d[t-a[t]+n]=1;

Try(t+1);

c[t+a[t]]=0;

d[t-a[t]+n]=0;

for(j=1;

%2d"

a[j]);

s=s+1;

voidswap(intt1,intt2)

intt;

t=a[t1];

a[t1]=a[t2];

a[t2]=t;

inputn:

%d"

n);

for(i=1;

a[i]=i;

c[i]=0;

c[n+1]=0;

d[i]=0;

d[n+i]=0;

Try

(1);

\n总共情况:

s=%d\n"

s);

实验总结

本次实验是对书上的例题进行验证和理解。

通过本次的实验让我初步对图的搜索和遍历有了一定的了解。

在这次实验中我进一步掌握回溯法和分支限界策略的设计思想与方法以及掌握回溯法和分支限界策略的编程实现与优化。

通过本次实验我学到了很多。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 法学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1