#include<iostream>
#include<vector>
#include<math.h>
using namespace std;
int max(int i ,int j){
return i > j ? i: j;
}
int min(int i,int j){
return i < j ? i: j;
}
int dfs(int m,int c,int i,vector<vector<int>>graph){
//和
if(i > 2 * graph.size()) return 0;
// 老鼠躲进洞了
if(m == 0) return -1;
// 猫抓到老鼠了
if(c == m) return 1;
int res = i % 2 == 0 ? 1:-1 ;
if (i % 2 == 0) {
for(int nxt:graph[m]){
//对于老鼠来说,想要得分尽可能小
res = min(res,dfs(nxt,c,i+1,graph));
cout << "老鼠在" << nxt << endl;
//老鼠躲进洞了
if(res == -1) break;
}
}
else{
for(int nxt:graph[c]){
if(nxt != 0) {
//对于猫来说,想要得分尽可能大
res = max(res,dfs(m,nxt,i+1,graph));
cout << "猫在" << nxt << endl;
}
//猫抓到老鼠了
if(res == 1) break;
}
}
return res;
}
int catMouseGame(vector<vector<int>>graph){
int ans = dfs(1,2,0,graph);
if(ans == 1){
return 2;
}
else if(ans == -1){
return 1;
}
else{
return 0;
}
}
int main(){
vector<vector<int>>graph1 = {{2,5},{3},{0,4,5},{1,4,5},{2,3},{0,2,3}};
vector<vector<int>>graph2 = {{1,3},{0},{3},{0,2}};
cout << catMouseGame(graph1) << endl;
cout << catMouseGame(graph2) << endl;
return 0;
}
leetcode 猫和老鼠
最新推荐文章于 2025-02-10 10:46:20 发布