题目一:
在计算机中用图中的方块图表示迷宫,每个方块或为通道(白色),或为墙(黑色)。所求路径必须是简单路径,即求得的路径上不能重复出现同一通道块。
题目二:
设计一个二分查找函数,对输入的一个非降序的数组a和数x,若a中存在与x相等的元素,则输出此元素的下标,否则输出-1。
第一题直接上panda的、
#include <stdio.h>
#include <stdlib.h>
struct stack
{
int i;
int j;
int path;
}Stack[100];
void findPaths(int maze[][10],int startx,int starty,int endx,int endy)
{
int i=startx,j=starty,k;
int top=0,path=-1;
int find;
Stack[top].i = i;
Stack[top].j = j;
Stack[top].path = path;
maze[i][j] = -1;
while (top>=0)
{
if (i==endx && j == endy)
{
printf("路径如下:\n");
for (k=0;k<=top;k++)
{
printf("(%d,%d) ",Stack[k].i,Stack[k].j);
if ((k+1)%3==0)
printf("\n");
}
printf("\n");
break;
}
find = 0;
path = Stack[top].path;
while (path<4 && find==0)
{
path++;
switch(path)
{
case 0:
i = Stack[top].i+1;
j = Stack[top].j;
break;
case 1:
i = Stack[top].i;
j = Stack[top].j+1;
break;
case 2:
i = Stack[top].i-1;
j = Stack[top].j;
break;
case 3:
i = Stack[top].i;
j = Stack[top].j-1;
break;
}
if (maze[i][j]==0)
find = 1;
}
if (find)
{
Stack[top++].path = path;
Stack[top].i = i;
Stack[top].j = j;
Stack[top].path = -1;
maze[i][j] = -1;
}
else
{
maze[Stack[top].i][Stack[top].j] = 0;
top--;
}
}
if (top<0)
printf("已没有路径可走!\n");
}
int main(void)
{
int maze[10][10] = {
{1,1,1,1,1,1,1,1,1,1},
{1,0,0,1,1,0,0,1,0,1},
{1,0,0,1,0,0,0,1,0,1},
{1,0,0,0,0,1,1,0,0,1},
{1,0,1,1,1,0,0,0,0,1},
{1,0,0,0,1,0,0,0,0,1},
{1,0,1,0,0,0,1,0,0,1},
{1,0,1,1,1,0,1,1,0,1},
{1,1,0,0,0,0,0,0,0,1},
{1,1,1,1,1,1,1,1,1,1}};
findPaths(maze,1,1,8,8);
return 0;
}
第二题
#include <stdio.h>
#define N 15
int search(int array[],int n);
int main()
{
int array[N];
int i;
int n;
int index;
printf("输入待查找数组:\n");
for(i=0;i<N;i++)
scanf("%d",&array[i]);
printf("请输入待查找元素:\n");
scanf("%d",&n);
index=search(array,n);
printf("index=%d",index);
return 0;
}
int search(int array[],int n)
{
int mid;
int low=0;
int high=N-1;
while(low<=high)
{
mid=(low+high)/2;
if(array[mid]==n)
return mid;
if(array[mid]<n)
low=mid+1;
else
high=mid-1;
}
return -1;
}