离散数学三个老师任课问题——Java dfs实现

三个老师问题:已知 A,B,C 3 人是小学老师,各教两门课,互不重复,共有
如下六门课。语文、数学、政治、地理、音乐和美术,已经知道:
–政治老师和数学老师是邻居
–地理老师比语文老师年龄大
–B 最年轻
–A 经常给地理老师和数学老师讲他看过的文学作品
–B 经常和音乐老师、语文老师一起游泳
要求:编程判断 A,B,C 各教哪门课

离散数学布置的上机题,网上大多是6个for循环,这里提供我的思路仅供参考。

package 离散数学;
//0语文 1数学 2政治 3地理 4音乐 5美术

import java.util.ArrayList;

public class 老师任课问题 {
	static String str[] = {"语文课","数学课","政治课","地理课","音乐课","美术课"};
	static char tc[] = {'A','B','C'};//便于输出结果
	
	static int lesson[] = new int [6];//六门课
	static int teacher[] = new int [3];//标记老师是否教了两门课
	static ArrayList<Integer> arr = new ArrayList<>();//存储结果
	
	static void dfs(int index) {
		if( index == 6) {//六门课搜索完毕,截止条件
			if(lesson[2] != lesson[1] && lesson[3] != lesson[0] && lesson[3] != lesson[1] && lesson[3] != 0 && lesson[1] != 0 && lesson[4] != lesson[0] && lesson[4] != 1 && lesson[0] != 1 && lesson[3] != 1) {//根据题目得到的判断式
				for ( int i : lesson) {
					arr.add(i);
				}
			}
			return;
		}
		//搜索
		else {
			for (int j = 0; j < 3; j ++ ) {
				if(teacher[j] <= 1) {//如果该老师上的课数小于等于1节课
					teacher[j] ++;
					lesson[index] = j;
					dfs(index + 1);
					teacher[j] --;//回溯
				}
			}
		}
	}
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		dfs(0);
		int k = 0;
		for( int i : arr) {
			System.out.println(tc[i] + "老师教" + str[k]);
			k ++;
		}
	}

}

输出结果:在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值