曹魏武将表

曹魏武将表
 作者:
曹魏年号西历大司马大将军骠骑将军车骑将军卫将军中军大将军上军大将军镇军大将军辅国大将军抚军大将军征东大将军征南大将军镇东大将军征东将军征西将军征南将军征北将军镇东将军镇西将军镇南将军镇北将军前将军左将军右将军后将军
建安21年216              夏侯渊曹仁   张鲁  于禁乐进 
建安23年218                         
延康元年220                     张辽张郃 徐晃 
黄初元年220 夏侯敦 曹仁曹洪          夏侯尚 臧霸曹真  张辽张郃 徐晃朱灵
黄初元年220  曹洪曹仁           夏侯尚 臧霸曹真  张辽张郃 徐晃朱灵
黄初2年221 曹仁曹洪公孙恭  曹真      曹休 夏侯尚 臧霸   张辽张郃 徐晃朱灵
黄初2年221曹仁孙权曹洪公孙恭  曹真    夏侯尚 曹休   臧霸   张辽张郃 徐晃朱灵
黄初3年222曹仁 曹洪公孙恭  曹真   曹休夏侯尚       黄权  张郃 徐晃朱灵
黄初4年223  曹洪公孙恭 曹真    曹休夏侯尚       黄权  张郃 徐晃文聘
黄初5年224  曹洪公孙恭 曹真    曹休夏侯尚       黄权 满宠张郃 徐晃文聘
黄初6年225  曹洪公孙恭 曹真 陈群 司马懿曹休夏侯尚       黄权 满宠张郃 徐晃文聘
黄初7年226曹休曹真司马懿公孙恭               黄权 满宠张郃 徐晃曹洪
太和元年227曹休曹真司马懿公孙恭               黄权 满宠张郃  曹洪
太和2年228 曹真司马懿公孙恭               黄权 满宠张郃  曹洪
太和3年229 曹真司马懿公孙恭          张郃     黄权 满宠  曹洪
太和4年230曹真司马懿曹洪张郃          满宠张郃   夏侯  黄权吕昭   
太和5年231 司马懿曹洪          满宠     黄权吕昭   
太和6年232 司马懿           满宠     黄权吕昭    
黄龙元年233公孙渊司马懿           满宠     黄权吕昭    
黄龙2年234公孙渊司马懿           满宠     黄权吕昭    
黄龙3年235公孙渊            满宠     黄权吕昭    
景初元年237             满宠     黄权吕昭    
景初2年238 曹宇                黄权吕昭   牛金
景初2年238 曹爽                黄权吕昭   牛金
景初3年239 曹爽 黄权               吕昭  夏侯霸 
正始元年240 曹爽                   郭淮夏侯霸 
正始2年241 曹爽           赵俨       郭淮夏侯霸 
正始3年242 曹爽           赵俨 程喜     郭淮夏侯霸 
正始4年243 曹爽赵俨          夏侯玄 程喜     郭淮夏侯霸 
正始5年244 曹爽赵俨          夏侯玄 程喜    郭淮 夏侯霸 
正始6年245 曹爽刘放孙资        胡质夏侯玄王昶程喜    郭淮 夏侯霸 
正始7年245 曹爽刘放孙资        胡质夏侯玄王昶程喜    郭淮毌丘俭夏侯霸 
正始9年248 曹爽           胡质夏侯玄王昶程喜  毌丘俭 郭淮 夏侯霸 
嘉平元年249             胡质郭淮王昶程喜  毌丘俭 文钦   
嘉平2年250  孙资郭淮司马师        胡遵 王昶程喜  毌丘俭 文钦   
嘉平3年251  孙资郭淮     司马师 王昶 胡遵   诸葛诞 毌丘俭陈本文钦   
嘉平4年252 司马师 郭淮       王昶 胡遵   诸葛诞 毌丘俭刘靖文钦   
嘉平5年253 司马师 郭淮       王昶 胡遵   丘俭 诸葛诞刘靖文钦   
嘉平6年254 司马师 郭淮司马昭        胡遵  何曾    文钦   
正元2年255 司马昭王昶 胡遵       诸葛诞 陈泰 何曾        
正元2年255 司马昭王昶 胡遵     诸葛诞   陈泰 何曾        
甘露元年256 司马昭王昶       诸葛诞   司马望 何曾 邓艾王基     
甘露2年257 司马昭王昶孙懿         州太司马望 何曾王基邓艾      
甘露3年258 司马昭 孙懿         州太司马望 何曾王基邓艾   司马亮 钟毓
甘露4年259 司马昭           州太司马望王基何曾石苞邓艾   司马亮 钟毓
景元2年261 司马昭        石苞   司马望何曾 邓艾   司马亮 钟毓
景元3年262 司马昭            司马望何曾 邓艾   司马亮司马由钟毓
景元4年263 司马昭赵酆 司马望          何曾 邓艾  李辅 司马由 
咸熙元年264 司马昭司马望    甄德甄温司马炎        王沈 李辅 司马由 
咸熙2年265 司马昭石苞司马攸  甄德甄温           李辅 司马由 


 
以下是基于邻接实现的c++代码,实现了上述所有功能: ```c++ #include <iostream> #include <fstream> #include <vector> #include <unordered_map> #include <queue> #include <stack> using namespace std; // 定义人物结构体 struct Person { string name; string country; }; // 定义边结构体 struct Edge { string relation; Person* person; }; // 定义图类 class Graph { private: // 存储顶点和边的邻接 unordered_map<string, vector<Edge>> adj_list; // 存储所有顶点的name和country unordered_map<string, string> vertex_info; public: // 添加顶点 void add_vertex(Person* person) { adj_list[person->name] = vector<Edge>(); vertex_info[person->name] = person->country; } // 添加边 void add_edge(string from, string to, string relation) { Person* p = new Person{ to, vertex_info[to] }; Edge e = { relation, p }; adj_list[from].push_back(e); } // 输出邻接 void print_graph() { ofstream out("TRKGraph.txt"); for (auto it = adj_list.begin(); it != adj_list.end(); it++) { out << it->first; for (auto edge : it->second) { out << "--" << edge.relation << "-->" << edge.person->name; } out << endl; } out.close(); } // 统计人物关系数量最多的前10个三国人物及其所属国 void top_10_relations() { unordered_map<string, int> relation_count; for (auto it = adj_list.begin(); it != adj_list.end(); it++) { relation_count[it->first] = 0; for (auto edge : it->second) { relation_count[edge.person->name]++; } } vector<pair<string, int>> count_vec; for (auto it = relation_count.begin(); it != relation_count.end(); it++) { count_vec.push_back(*it); } sort(count_vec.begin(), count_vec.end(), [](pair<string, int>& a, pair<string, int>& b) { return a.second > b.second; }); cout << "人物关系数量最多的前10个三国人物及其所属国:" << endl; for (int i = 0; i < min((int)count_vec.size(), 10); i++) { cout << count_vec[i].first << "(" << vertex_info[count_vec[i].first] << "):" << count_vec[i].second << endl; } } // 搜索从from到to的路径,使用深度优先搜索 void dfs_path(string from, string to, vector<string>& visited, vector<string>& path, vector<vector<string>>& paths) { visited.push_back(from); path.push_back(from); if (from == to) { paths.push_back(path); visited.pop_back(); path.pop_back(); return; } for (auto edge : adj_list[from]) { string next_name = edge.person->name; if (find(visited.begin(), visited.end(), next_name) == visited.end()) { dfs_path(next_name, to, visited, path, paths); } } visited.pop_back(); path.pop_back(); } // 查找2个人物之间所有关系,展示关系路径,并说明最短路径 void find_path(string from, string to) { vector<string> visited; vector<string> path; vector<vector<string>> paths; dfs_path(from, to, visited, path, paths); if (paths.empty()) { cout << "这两个人没有关系" << endl; } else { cout << "这两个人之间所有关系路径:" << endl; for (auto p : paths) { for (int i = 0; i < p.size() - 1; i++) { cout << p[i] << "--" << get_relation(p[i], p[i + 1]) << "-->"; } cout << p.back() << endl; } cout << "最短路径:" << endl; vector<string> shortest_path = get_shortest_path(paths); for (int i = 0; i < shortest_path.size() - 1; i++) { cout << shortest_path[i] << "--" << get_relation(shortest_path[i], shortest_path[i + 1]) << "-->"; } cout << shortest_path.back() << endl; } } // 智能问答 void intelligent_qa(string name) { string master = get_master(name); if (master == "") { cout << "找不到这个人" << endl; return; } string son = get_son(master); if (son == "") { cout << master << "没有儿子" << endl; } else { vector<string> visited; vector<string> path; vector<vector<string>> paths; dfs_path(name, son, visited, path, paths); cout << name << "的主公的儿子是" << son << endl; if (paths.empty()) { cout << "他们之间没有关系" << endl; } else { cout << "他们之间的关系路径:" << endl; for (auto p : paths) { for (int i = 0; i < p.size() - 1; i++) { cout << p[i] << "--" << get_relation(p[i], p[i + 1]) << "-->"; } cout << p.back() << endl; } } } } private: // 获取某个人物的主公 string get_master(string name) { for (auto it = adj_list.begin(); it != adj_list.end(); it++) { for (auto edge : it->second) { if (edge.person->name == name && edge.relation == "主公") { return it->first; } } } return ""; } // 获取某个人物的儿子 string get_son(string name) { for (auto edge : adj_list[name]) { if (edge.relation == "儿子") { return edge.person->name; } } return ""; } // 获取两个人物之间的关系 string get_relation(string from, string to) { for (auto edge : adj_list[from]) { if (edge.person->name == to) { return edge.relation; } } return ""; } // 获取最短路径 vector<string> get_shortest_path(vector<vector<string>>& paths) { int shortest_len = INT_MAX; vector<string> shortest_path; for (auto p : paths) { if (p.size() < shortest_len) { shortest_len = p.size(); shortest_path = p; } } return shortest_path; } }; int main() { // 构建三国人物关系图 Graph graph; // 添加顶点 vector<Person*> persons = { new Person{ "刘备", "蜀国" }, new Person{ "关羽", "蜀国" }, new Person{ "张飞", "蜀国" }, new Person{ "诸葛亮", "蜀国" }, new Person{ "张松", "汉中" }, new Person{ "程昱", "曹魏" }, new Person{ "曹操", "曹魏" }, new Person{ "曹丕", "曹魏" }, new Person{ "曹植", "曹魏" }, new Person{ "夏侯惇", "曹魏" }, new Person{ "夏侯渊", "曹魏" }, new Person{ "典韦", "曹魏" }, new Person{ "张辽", "曹魏" }, new Person{ "
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值