求助,第九题如图,我的代码有概率卡在循环例出不来
  • 板块学术版
  • 楼主Mathilda
  • 当前回复4
  • 已保存回复4
  • 发布时间2021/4/5 16:53
  • 上次更新2023/11/5 01:00:00
查看原帖
求助,第九题如图,我的代码有概率卡在循环例出不来
62711
Mathilda楼主2021/4/5 16:53

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <stdbool.h>

int main() {
	bool N1[10][10] = {false}; //定义一个检验是否有字母的布尔矩阵
	char N[10][10] = {'.'}; //定义一个字符矩阵

	for (int i = 0; i < 10; i++) { //对矩阵初始化'.'
		for (int j = 0; j < 10; j++) {
			N[i][j] = '.';
		}
	}

	srand((unsigned) time(NULL)); // 重置时间

	int ways;  //用来判断走哪条路
	int i = 0, j = 0; //指定初始位置和用于判断之后的位置(x轴为i,y轴为j)
	N[0][0] = 'A'; //指定初始位置的字母
	N1[0][0] = true; //指定初始位置布尔值是真

	for (int alphabet = 1; alphabet <= 25;) { //对于每一个字母
		ways = rand() % 4; //先判断走那条路(上, 下, 左, 右)
		if ( ways == 0) { // 如果走上面
			if (j - 1 < 0) { //如果遇到边界
				continue; //跳过剩下的在找一条路
			} else if (N1[i][j - 1] == true) { //如果上面有字母
				if ((N[i - 1][j] == true && N[i + 1][j] == true && N[i][j + 1] == true) || // 六种情况
				        (N[i - 1][j] == true && N[i][j + 1] == true && i + 1 > 9 ) ||
				        (N[i - 1][j] == true && i + 1 > 9 && j + 1 > 9) ||
				        (i - 1 < 0 && N[i + 1][j] == true && N[i][j + 1] == true) ||
				        (i - 1 < 0 && j + 1 > 9 && N[i + 1][j] == true) ||
				        (N[i - 1][j] == true && N[i + 1][j] == true && j + 1 > 9))
					continue; //遇到6种堵死的情况跳出这次循环去下一次循环找路
			} else {
				N[i][j - 1] = 'A' + alphabet;
				N1[i][j - 1] = true;
				alphabet++;
				j--;
			}
		}
		if ( ways == 1) { //如果走右边
			if (i + 1 > 9) { //如果遇到边界
				continue;
			} else if (N1[i + 1][j] == true) { //如果上面有字母
				if ((N[i][j - 1] == true && N[i - 1][j] == true && j + 1 > 9) ||
				        (N[i][j - 1] == true && i - 1 < 0 && j + 1 > 0) ||
				        (N[i][j + 1] == true && N[i][j - 1] == true && i - 1 < 0) ||
				        (j - 1 < 0 && N[i - 1][j] == true && N[i][j + 1] == true) ||
				        (j - 1 < 0 && i - 1 < 0 && N[i][j + 1] == true) ||
				        (N[i][j + 1] == true && N[i][j - 1] == true && N[i - 1][j] == true))
					continue;
			} else {
				N[i + 1][j] = 'A' + alphabet;
				N1[i + 1][j] = true;
				alphabet++;
				i++;
			}
		}
		if (ways == 2) { //如果走下面
			if (j + 1 > 9) {
				continue;
			} else if (N1[i][j + 1] == true) {
				if ((N[i][j - 1] == true && N[i - 1][j] == true && N[i + 1][j] == true) ||
				        (N[i - 1][j] == true && N[i][j - 1] == true && i + 1 > 9) ||
				        (N[i - 1][j] == true && i - 1 < 0 && j + 1 > 0) ||
				        (N[i + 1][j] == true && N[i][j - 1] == true && i - 1 < 0) ||
				        (i - 1 < 0 && j - 1 < 0 && N[i + 1][j] == true) ||
				        (N[i - 1][j] == true && N[i + 1][j] == true && j - 1 < 0))
					continue;
			} else {
				N[i][j + 1] = 'A' + alphabet;
				N1[i][j + 1] = true;
				alphabet++;
				j++;
			}
		}
		if (ways == 3) { //如果走左边
			if (i - 1 < 0) {
				continue;
			} else if (N1[i - 1][j] == true) {
				if ((N[i][j - 1] == true && N[i][j + 1] == true && i + 1 > 9) ||
				        (N[i][j - 1] == true && N[i + 1][j] == true && j + 1 > 9) ||
				        (N[i][j - 1] == true && i + 1 > 9 && j + 1 > 9) ||
				        (j - 1 < 0 && j + 1 > 9 && N[i + 1][j] == true) ||
				        (j - 1 < 0 && N[i + 1][j] == true && N[i][j + 1] == true) ||
				        (j + 1 < 0 && i + 1 > 9 && N[i][j + 1] == true))
					continue;
			} else {
				N[i - 1][j] = 'A' + alphabet;
				N1[i - 1][j] = true;
				alphabet++;
				i--;
			}
		}
	}

	for (int x = 0; x < 10; x++) {
		for (int y = 0; y < 10; y++) {
			printf("%c ", N[x][y]);
			if (y == 9) {
				printf("\n");
			}
		}

	}

	return 0;

}
2021/4/5 16:53
加载中...