鸽鸽鸽 2016-04-21 02:29 采纳率: 0%
浏览 2197

求助:一直说 已停止工作

题目:开始运行先提示用户输入彩球个数n(0<n≤81),然后随机选取颜色和位置填充棋盘,输出填充后的棋盘状态。
接下来,提示用户输入指定彩球的坐标(fx,fy)以及目标空位(tx,ty)(0≤fx,fy,tx,ty≤8),如果起点没有彩球,或者目标不是空位,需要提示错误并重新输入。
坐标以左上角为(0,0),第一个分量为行,后一个分量为列。
本题要求使用栈完成。

#if defined(WIN32) || defined(WIN64)
#include
#define sleep(n) Sleep(1000 * (n))
#endif
#include
#include
#include
int flag;
int x1,y1;
typedef struct{
int x;
int y;
} locate;
typedef struct {
locate *buf; //数据区
int top; //栈顶指针
int m; //栈大小
} stack;

void init_stack(stack s, int size) {
s->buf = ( locate
) malloc(size * sizeof(locate));
s->top = -1;
s->m = size;
}

void push(stack *s, int x,int y) {
if (s->top == s->m - 1) return;
s->top = s->top + 1;
(s->buf[s->top]).x = x;
(s->buf[s->top]).y = y;
}
void pop(stack *s, int *x,int *y) {
if (s->top == -1) return;
*x = (s->buf[s->top]).x;
*y = (s->buf[s->top]).y;
s->top = s->top - 1;
}
int is_empty(stack *s) {
return (s->top == -1);
}
void top(stack *s, int *x,int *y) {
if (s->top == -1) return;
*x = (s->buf[s->top]).x;
*y = (s->buf[s->top]).y;
}

int main()
{
void judge(int m,int n,int x,int y,int a[9][9]);
int i,j,count=0,m,n,x,y;
int a[9][9]={0};
printf("Please write the amount of ball:");
scanf("%d",&n);
srand((unsigned) time(NULL));
while(count<n)//填充随机数1是球球,0是空位
{
i= rand()%9;
j=rand()%9;
while(a[i][j]==1)
{
i= rand()%9;
j=rand()%9;
}
a[i][j]=1;
count++;
};
for(i=0;i<9;i++)//打印
for(j=0;j<9;j++)
{
printf("%d ",a[i][j]);
if(j==8) printf("\n");
}
printf("Please write the original location:");
scanf("%d,%d",&m,&n);
if (a[m][n]==0) {printf("fail!");return 0;}
printf("Please write the target location:");
scanf("%d,%d",&x,&y);
judge(m,n,x,y,a);
if(flag==1) printf("success!");
else printf("fail!");

return 0;
}

void judge(int m,int n,int x,int y,int a[9][9])
{
flag=0;
stack s;
init_stack(&s, 100);
int i,j;
i=m,j=n;
if((i==x)&(j==y)) flag=1;
while(!(a[i][j+1]&&a[i+1][j]&&a[i][j-1]&&a[i-1][j]))//如果四周都是球就退出了
{
if(a[i][j+1]==0&&(is_empty(&s)||!((i==x1)&&(j+1==y1)))&&(j>=0&&j<=7))
//如果(上面是空的)&&上一步不是往上走&&往上走不会溢出
{
j++;s.top++;push(&s,i,j);
}
else if(a[i+1][j]==0&&(is_empty(&s)||!((i+1==x1)&&(j==y1)))&&(i>=0&&i<=7))
{
i++;s.top++;push(&s,i,j);
}
else if(a[i][j-1]==0&&(is_empty(&s)||!((i==x1)&&(j-1==y1)))&&(j>=1&&j<=8))
{
j--;s.top++;push(&s,i,j);
}
else if(a[i-1][j]==0&&(is_empty(&s)||!((i-1==x1)||(j==y1)))&&(i>=1&&i<=8))
{
i--;s.top++;push(&s,i,j);
}
else
{
a[i][j]=1;pop(&s,&i,&j);
}
if((i==x)&&(j==y)) {
flag=1;
break;}
top(&s,&x1,&y1);//保存这次的行走坐标,给下次使用
}
}

结果一直显示停止工作,除非是那种就往右一格就到的那种才可以显示出来。
我是初学者,很菜,希望大神指导下,谢谢

  • 写回答

1条回答

  • 关注

    重新输入。
    坐标以左上角为(0,0),第一个分量为行,后一个分量为列。
    本题要求使用栈完成。
    #if defined(WIN32) || defined(WIN64)
    #include
    #define sleep(n) Sleep(1000 * (n))
    #endif
    #include
    #include
    #include
    int flag;
    int x1,y1;
    typedef struct{
    int x;
    int y;
    } locate;
    typedef struct {
    locate *buf; //数据区
    int top; //栈顶指针
    int m; //栈大小

    评论

报告相同问题?

悬赏问题

  • ¥15 聚类分析或者python进行数据分析
  • ¥15 逻辑谓词和消解原理的运用
  • ¥15 三菱伺服电机按启动按钮有使能但不动作
  • ¥15 js,页面2返回页面1时定位进入的设备
  • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
  • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号