手搓哈希表、列表、队列,只为了用C语言快速求解华容道游戏,我不是大佬,只是一个游戏算法爱好者
背景
多年前曾经写过C语言求解华容道,当时没有用到哈希表,导致整个查重搜索数组过大,每次求解都得花上数分钟的时间,如今时过境迁,对数据结构和算法有了更深的理解,所以得把这一块补上了。(其实就是最近想换工作,发现都喜欢算法大佬,所以写一个来敲一敲面试官的脑壳)
游戏
华容道挑战 7724游戏
方案

把曹操格子用1表示,横将用2表示,竖将用3表示,小兵用4表示,空地用0表示,上图可以转化了代号
2244
3110
3110
3433
3433
把上术内容保存到文本文件problem.txt当中
编写源文件main.c,内容为
/*==============依赖库导入 start================*/
#include<stdio.h> /* 标准输入输出库 */
#include<string.h> /* 字符串处理库 */
#include<malloc.h> /* 动态内存管理库 */
/*==============依赖库导入 end==================*//*================宏定义 start==================*/
/* 格子宏 */
#define SPACE '0' /* 空格 */
#define BIG '1' /* 大格 */
#define HORIZONTAL '2' /* 横格 */
#define VERTICAL '3' /* 竖格 */
#define SMALL '4' /* 小格 */
/* 方向宏 */
#define UP 1 /* 上 */
#define DOWN 2 /* 下 */
#define LEFT 3 /* 左 */
#define RIGHT 4 /* 右 */
/* 哈希宏 */
#define PRIMER 31 /* 素数系数 */
#define MOD 10007 /* 素数哈希 */
/*================宏定义 end====================*//*===============数据结构 start=================*/
typedef struct LinkList { /* 链表 */char *str; /* 字符串 */struct LinkList *next; /* 下一个节点指针 */
} LinkList;typedef struct HashSet { /* 哈希集合 */LinkList *linkList[MOD]; /* 链表数组 */
} HashSet;typedef struct Block { /* 方块 */char type; /* 类型 */int x; /* 左上角横坐标 */int y; /* 左上角纵坐标 */int w,h; /* 格子宽高 */struct Block *next; /* 下一个节点 */
} Block;typedef struct Operation { /* 操作 */int x,y; /* 格子位置 */int direction; /* 移动类型 */
} Operation;typedef struct Node { /* 节点 */char **arr; /* 字符数组 */Operation *operation; /* 上一步操作 */struct Node *previous; /* 上一个节点 */struct Node *next; /* 下一个节点 */
} Node;typedef struct Queue { /* 队列 */Node *head; /* 队头 */Node *tail; /* 队尾 */int count; /* 数量 */
} Queue;
/*===============数据结构 end===================*//* 从文件读取题目 */
void readProblemFile(char **arr,char *filepath) {freopen(filepath,"r",stdin);int i,j;for(i=0; i<5; i++) {scanf("%s",arr[i]);printf("%s\n",arr[i]);}printf("\n");
}/* 获取字符数组哈希码 */
int hashCode(char **arr,char value[]) {int res=0;int i,j,k=0;for(i=0; i<5; i++) {for(j=0; j<4; j++) {value[k]=arr[i][j];k++;res=res*PRIMER+arr[i][j]-'0';res%=MOD;}}return res;
}/* 往哈希表中添加对象 */
int addObjectToHashSet(char **arr,HashSet *hashSet) {char value[21]= {'\0'};int code=hashCode(arr,value);LinkList *linkList=hashSet->linkList[code];while(linkList!=NULL) {if(strcmp(linkList->str,value)==0) {return 0;} else {linkList=linkList->next;}}LinkList *listHead=(LinkList*)malloc(sizeof(LinkList));listHead->str=(char*)malloc(sizeof(char)*21);strcpy(listHead->str,value);listHead->next=hashSet->linkList[code];hashSet->linkList[code]=listHead;return 1;
}/* 释放哈希表 */
void freeHashSet(HashSet *hashSet) {int i;for(i=0; i<MOD; i++) {while(hashSet->linkList[i]!=NULL) {LinkList *linkList=hashSet->linkList[i];hashSet->linkList[i]=hashSet->linkList[i]->next;free(linkList);}}free(hashSet);
}/* 入队 */
void enQueue(char **arr,int x,int y,int direction,Queue *queue) {int i;Node *node=(Node*)malloc(sizeof(Node));node->arr=(char**)malloc(sizeof(char*)*5);for(i=0; i<5; i++) {node->arr[i]=(char*)malloc(sizeof(char)*5);strcpy(node->arr[i],arr[i]);}if(x==-1||y==-1||direction==-1) {node->operation=NULL;} else {node->operation=(Operation*)malloc(sizeof(Operation));node->operation->x=x;node->operation->y=y;node->operation->direction=direction;}node->previous=NULL;node->next=NULL;if(queue->head==NULL) {queue->head=node;queue->tail=node;queue->count=0;} else {queue->tail->next=node;node->previous=queue->head;queue->tail=node;}queue->count++;
}/* 出队 */
void deQueue(Queue *queue) {queue->head=queue->head->next;queue->count--;
}/* 释放队列 */
void freeQueue(Queue *queue) {while(queue->head!=NULL) {Node* node=queue->head;queue->head=queue->head->next;if(node->operation!=NULL) {free(node->operation);}if(node->arr!=NULL) {int i;for(i=0; i<5; i++) {free(node->arr[i]);}free(node->arr);}}free(queue);
}/* 生成格子链表 */
Block* getBlocks(char **arr) {int i,j,u,v;Block* blocks=NULL;char temp[5][4]= {0};for(i=0; i<5; i++) {strcpy(temp[i],arr[i]);}for(i=0; i<5; i++) {for(j=0; j<4; j++) {if(temp[i][j]==SPACE) {continue;}Block *block=(Block*)malloc(sizeof(Block));block->next=blocks;blocks=block;block->type=temp[i][j];block->x=i;block->y=j;switch(temp[i][j]) {case BIG:block->w=2;block->h=2;break;case HORIZONTAL:block->w=2;block->h=1;break;case VERTICAL:block->w=1;block->h=2;break;case SMALL:block->w=1;block->h=1;break;}for(u=i; u<i+block->h; u++) {for(v=j; v<j+block->w; v++) {temp[u][v]=SPACE;}}}}return blocks;
}/* 释放格子链表 */
void freeBlocks(Block *blocks) {while(blocks->next!=NULL) {Block *block=blocks;blocks=blocks->next;free(block);}
}/* 创建字符数组 */
char** createArray() {int i,j;char** res=(char**)malloc(sizeof(char*)*5);for(i=0; i<5; i++) {res[i]=(char*)malloc(sizeof(char)*5);for(j=0; j<4; j++) {res[i][j]='0';}res[i][4]='\0';}return res;
}/* 释放字符数组 */
void freeArray(char **arr) {int i;for(i=0; i<5; i++) {free(arr[i]);}free(arr);
}/* 方块转字符数组 */
void blocksToArray(Block *blocks,char **arr) {int i,j;while(blocks!=NULL) {Block *block=blocks;blocks=blocks->next;for(i=block->x; i<block->x+block->h; i++) {for(j=block->y; j<block->y+block->w; j++) {arr[i][j]=block->type;}}}
}/* 打印所求结果 */
void displaySolution(Node *node) {if(node->operation==NULL) {return;} else {displaySolution(node->previous);int i;char directionName[][10]= {"","↑","↓","←","→"};printf("[%d,%d] %s\n",node->operation->x,node->operation->y,directionName[node->operation->direction]);}
}/* 主函数 */
int main(int argc,char *argv[]) {char **array=(char**)malloc(sizeof(char*)*5);int i,j;for(i=0; i<5; i++) {array[i]=(char*)malloc(sizeof(char)*5);array[i][4]='\0';}if(argc==2) {readProblemFile(array,argv[1]);} else {strcpy(array[0],"3113\0");strcpy(array[1],"3113\0");strcpy(array[2],"3223\0");strcpy(array[3],"3443\0");strcpy(array[4],"4004\0");}HashSet hashSet;for(i=0; i<MOD; i++) {hashSet.linkList[i]=NULL;}Queue queue;queue.head=NULL;queue.tail=NULL;Node *result=NULL;addObjectToHashSet(array,&hashSet);enQueue(array,-1,-1,-1,&queue);free(array);while(queue.head!=NULL) {Node *node=queue.head;if(node->arr[3][1]==BIG && node->arr[4][2]==BIG) {result=node;break;}Block *blocks=getBlocks(node->arr);Block *blocksHead=blocks;while(blocksHead!=NULL) {Block *block=blocksHead;blocksHead=blocksHead->next;char **arr=NULL;switch(block->type) {case BIG:if(block->x>0 && node->arr[block->x-1][block->y]==SPACE && node->arr[block->x-1][block->y+1]==SPACE) {arr=createArray();block->x--;blocksToArray(blocks,arr);block->x++;if(addObjectToHashSet(arr,&hashSet)) {enQueue(arr,block->x,block->y,UP,&queue);}}if(block->x+block->h<5 && node->arr[block->x+block->h][block->y]==SPACE && node->arr[block->x+block->h][block->y+1]==SPACE) {arr=createArray();block->x++;blocksToArray(blocks,arr);block->x--;if(addObjectToHashSet(arr,&hashSet)) {enQueue(arr,block->x,block->y,DOWN,&queue);}}if(block->y>0 && node->arr[block->x][block->y-1]==SPACE && node->arr[block->x+1][block->y-1]==SPACE) {arr=createArray();block->y--;blocksToArray(blocks,arr);block->y++;if(addObjectToHashSet(arr,&hashSet)) {enQueue(arr,block->x,block->y,LEFT,&queue);}}if(block->y+block->w<4 && node->arr[block->x][block->y+block->w]==SPACE && node->arr[block->x+1][block->y+block->w]==SPACE) {arr=createArray();block->y++;blocksToArray(blocks,arr);block->y--;if(addObjectToHashSet(arr,&hashSet)) {enQueue(arr,block->x,block->y,RIGHT,&queue);}}break;case HORIZONTAL:if(block->x>0 && node->arr[block->x-1][block->y]==SPACE && node->arr[block->x-1][block->y+1]==SPACE) {arr=createArray();block->x--;blocksToArray(blocks,arr);block->x++;if(addObjectToHashSet(arr,&hashSet)) {enQueue(arr,block->x,block->y,UP,&queue);}}if(block->x+block->h<5 && node->arr[block->x+block->h][block->y]==SPACE && node->arr[block->x+block->h][block->y+1]==SPACE) {arr=createArray();block->x++;blocksToArray(blocks,arr);block->x--;if(addObjectToHashSet(arr,&hashSet)) {enQueue(arr,block->x,block->y,DOWN,&queue);}}if(block->y>0 && node->arr[block->x][block->y-1]==SPACE) {arr=createArray();block->y--;blocksToArray(blocks,arr);block->y++;if(addObjectToHashSet(arr,&hashSet)) {enQueue(arr,block->x,block->y,LEFT,&queue);}}if(block->y+block->w<4 && node->arr[block->x][block->y+block->w]==SPACE) {arr=createArray();block->y++;blocksToArray(blocks,arr);block->y--;if(addObjectToHashSet(arr,&hashSet)) {enQueue(arr,block->x,block->y,RIGHT,&queue);}}break;case VERTICAL:if(block->x>0 && node->arr[block->x-1][block->y]==SPACE) {arr=createArray();block->x--;blocksToArray(blocks,arr);block->x++;if(addObjectToHashSet(arr,&hashSet)) {enQueue(arr,block->x,block->y,UP,&queue);}}if(block->x+block->h<5 && node->arr[block->x+block->h][block->y]==SPACE) {arr=createArray();block->x++;blocksToArray(blocks,arr);block->x--;if(addObjectToHashSet(arr,&hashSet)) {enQueue(arr,block->x,block->y,DOWN,&queue);}}if(block->y>0 && node->arr[block->x][block->y-1]==SPACE && node->arr[block->x+1][block->y-1]==SPACE) {arr=createArray();block->y--;blocksToArray(blocks,arr);block->y++;if(addObjectToHashSet(arr,&hashSet)) {enQueue(arr,block->x,block->y,LEFT,&queue);}}if(block->y+block->w<4 && node->arr[block->x][block->y+block->w]==SPACE && node->arr[block->x+1][block->y+block->w]==SPACE) {arr=createArray();block->y++;blocksToArray(blocks,arr);block->y--;if(addObjectToHashSet(arr,&hashSet)) {enQueue(arr,block->x,block->y,RIGHT,&queue);}}break;case SMALL:if(block->x>0 && node->arr[block->x-1][block->y]==SPACE) {arr=createArray();block->x--;blocksToArray(blocks,arr);block->x++;if(addObjectToHashSet(arr,&hashSet)) {enQueue(arr,block->x,block->y,UP,&queue);}}if(block->x+block->h<5 && node->arr[block->x+block->h][block->y]==SPACE) {arr=createArray();block->x++;blocksToArray(blocks,arr);block->x--;if(addObjectToHashSet(arr,&hashSet)) {enQueue(arr,block->x,block->y,DOWN,&queue);}}if(block->y>0 && node->arr[block->x][block->y-1]==SPACE) {arr=createArray();block->y--;blocksToArray(blocks,arr);block->y++;if(addObjectToHashSet(arr,&hashSet)) {enQueue(arr,block->x,block->y,LEFT,&queue);}}if(block->y+block->w<4 && node->arr[block->x][block->y+block->w]==SPACE) {arr=createArray();block->y++;blocksToArray(blocks,arr);block->y--;if(addObjectToHashSet(arr,&hashSet)) {enQueue(arr,block->x,block->y,RIGHT,&queue);}}break;}}while(blocks!=NULL) {blocksHead=blocks;blocks=blocks->next;free(blocksHead);}deQueue(&queue);}if(result!=NULL) {printf("求解完成\n");displaySolution(result);} else {printf("此题无解\n");}freeHashSet(&hashSet);freeQueue(&queue); return 0;
}
编译源文件main.c得到可执行程序main.exe,把main.exe和problem.txt放在同一个文件夹下。
使用cmd打开此目录,执行命令
main.exe problem.txt > 1.txt
稍后便可在目录下生成1.txt文件,里边保存的就是游戏的通关参考答案。
2244
3110
3110
3433
3433求解完成
[3,3] ↑
[2,3] ↑
[3,2] →
[4,1] →
[3,1] ↓
[1,1] ↓
[0,2] ↓
[1,2] ←
[0,3] ←
[1,3] ↑
[3,3] ↑
[4,2] →
[0,2] ↓
[0,0] →
[1,0] ↑
[3,0] ↑
[4,1] ←
[2,1] ↓
思路
之前已经有博文进行了详细介绍,此处不再赘述。
相关文章:
手搓哈希表、列表、队列,只为了用C语言快速求解华容道游戏,我不是大佬,只是一个游戏算法爱好者
背景 多年前曾经写过C语言求解华容道,当时没有用到哈希表,导致整个查重搜索数组过大,每次求解都得花上数分钟的时间,如今时过境迁,对数据结构和算法有了更深的理解,所以得把这一块补上了。(其实就是最近想…...
MySQL 的执行原理(一)
5.1 单表访问之索引合并 我们前边说过 MySQL 在一般情况下执行一个查询时最多只会用到单个二级 索引,但存在有特殊情况,在这些特殊情况下也可能在一个查询中使用到多个二 级索引,MySQL 中这种使用到多个索引来完成一次查询的执行方法称之为&…...
2023_“数维杯”问题B:棉秸秆热解的催化反应-详细解析含代码
题目翻译: 随着全球对可再生能源需求的不断增加,生物质能作为一种成熟的可再生能源得到了广泛的关注。棉花秸秆作为一种农业废弃物,因其丰富的纤维素、木质素等生物质成分而被视为重要的生物质资源。虽然棉花秸秆的热解可以产生各种形式的可…...
django理解01
接在Vue理解01后 项目创建 pycharm上下载django框架 在需要创建项目的文件夹终端django-admin startproject 项目名终端创建APPpython manage.py startapp app名注册APP,settings.py里INSTALLED_APPS下,增加一项:app名.apps.类名࿰…...
限制Domain Admin登录非域控服务器和用户计算机
限制Domain Admin管理员使用敏感管理员帐户(域或林中管理员组、域管理员组和企业管理员组中的成员帐户)登录到信任度较低的服务器和用户端计算机。 此限制可防止管理员通过登录到信任度较低的计算机来无意中增加凭据被盗的风险。 建议采用的策略 建议使用以下策略限制对信任度…...
原来机械硬盘比内存慢10万倍
我们都知道机械硬盘的速度很慢,内存的速度很快,那么不同存储器之间的差距到底有多大呢? 我们先来看一幅图: CPU访问寄存器的时间是0.3纳秒,访问L1高速缓存的时间是1纳秒,访问L2高速缓存的时间是4纳秒… 秒…...
ElementUI的Dialog弹窗实现拖拽移动功能
文章目录 1. ElementUI简介2. 弹窗基本使用3. 实现拖拽移动功能4. 拓展与分析 🎉欢迎来到Java学习路线专栏~ElementUI的Dialog弹窗实现拖拽移动功能 ☆* o(≧▽≦)o *☆嗨~我是IT陈寒🍹✨博客主页:IT陈寒的博客🎈该系列文章专栏&a…...
生成式AI模型量化简明教程
在不断发展的人工智能领域,生成式AI无疑已成为创新的基石。 这些先进的模型,无论是用于创作艺术、生成文本还是增强医学成像,都以产生非常逼真和创造性的输出而闻名。 然而,生成式AI的力量是有代价的—模型大小和计算要求。 随着生…...
机器人制作开源方案 | 智能快递付件机器人
一、作品简介 作者:贺沅、聂开发、王兴文、石宇航、盛余庆 单位:黑龙江科技大学 指导老师:邵文冕、苑鹏涛 1. 项目背景 受新冠疫情的影响,大学校园内都采取封闭式管理来降低传染的风险,导致学生不能外出,…...
PostgreSQL技术大讲堂 - 第34讲:调优工具pgBagder部署
PostgreSQL从小白到专家,是从入门逐渐能力提升的一个系列教程,内容包括对PG基础的认知、包括安装使用、包括角色权限、包括维护管理、、等内容,希望对热爱PG、学习PG的同学们有帮助,欢迎持续关注CUUG PG技术大讲堂。 第34讲&#…...
《Python日志新宠——Loguru,轻松记录,笑对Bug!》
嘿,程序媛和程序猿们!👩💻👨💻 你们是不是也曾为日志处理这个“小事”而头疼?别着急,今天我给你们介绍一个简直比拥抱泰迪熊还要温暖的Python库——Loguru!这货不仅强…...
NET8 ORM 使用AOT SqlSugar
.NET AOT8 基本上能够免强使用了, SqlSugar ORM也支持了CRUD 能在AOT下运行了 Nuget安装 SqlSugarCore 具体代码 StaticConfig.EnableAot true;//启用AOT 程序启动执行一次就好了//用SqlSugarClient每次都new,不要用单例模式 var db new SqlSugarClient(new ConnectionC…...
CCRC认证是什么?
什么是CCRC认证? 信息安全服务资质,是信息安全服务机构提供安全服务的一种资格,包括法律地位、资源状况、管理水平、技术能力等方面的要求。 信息安全服务资质(CCRC)是依据国家法律法规、国家标准、行业标准和技术规范…...
linux内核面试题(2)
整理了一些网上的linux驱动岗位相关面试题,如果错误,欢迎指正。 工作队列是运行在进程上下文,还是中断上下文?它的回调函数是否允许睡眠? 工作队列是运行在进程上下文的。工作队列的回调函数是允许睡眠的,…...
YOLOV5----修改损失函数-ShuffleAttention
主要修改yolo.py、yolov5s.yaml及添加ShuffleAttention.py 一、ShuffleAttention.py import numpy as np import torch from torch import nn from torch.nn import init from torch.nn.parameter import Parameterclass ShuffleAttention(nn.Module):def...
Kafka(四)消费者消费消息
文章目录 如何确保不重复消费消息?消费者业务逻辑重试消费者提交自定义反序列化类消费者参数配置及其说明重要的参数session.time.ms和heartbeat.interval.ms和group.instance.id增加消费者的吞吐量消费者消费的超时时间和poll()方法的关系 消费者消费逻辑启动消费者…...
Python uiautomation获取微信内容!聊天记录、聊天列表、全都可获取
Python uiautomation 是一个用于自动化 GUI 测试和操作的库,它可以模拟用户操作来执行各种任务。 通过这个库,可以使用Python脚本模拟人工点击,人工操作界面。本文使用 Python uiautomation 进行微信电脑版的操作。 以下是本次实验的版本号。…...
Java通过Lettuce访问Redis主从,哨兵,集群
操作 首先需要maven导入依赖 <dependency><groupId>io.lettuce</groupId><artifactId>lettuce-core</artifactId><version>6.3.0.RELEASE</version> </dependency> 测试连接 public class LettuceDemo {public static voi…...
嵌入式数据库Sqlite
本文主要是介绍如何再Ubuntu下使用sqlite数据库,并且嵌入式QT环境下使用C语言来构建一个sqlite数据库,使用sqlite browser进行数据库的可视化。 1、安装sqlite 在ubuntu系统中的安装需要先下载一个安装包,SQLite Download Page 安装命令&a…...
计算机网络:网络层ARP协议
在实现IP通信时使用了两个地址:IP地址(网络层地址)和MAC地址(数据链路层地址) 问题:已知一个机器(主机或路由器)的IP地址,如何找到相应的MAC地址? 为了解决…...
51单片机IO口不够用?试试用PCF8574模块驱动LCD1602,I2C接口省下6个引脚
51单片机IO资源紧张?PCF8574模块驱动LCD1602的实战指南 当你用51单片机开发项目时,是否遇到过这样的困境:传感器、按键、通信接口已经占用了大部分IO口,而显示模块却无处安放?传统驱动LCD1602需要6-8个IO引脚ÿ…...
科研学术篇---文献引用格式
面对五花八门的引用格式,你只需要记住一个核心:不同的学科,就像不同的“方言区”,各自有一套约定俗成的引用“语法”。学会识别和使用它们,是学术写作的基本功。下面通俗地介绍最常见的几种格式,帮你一眼看…...
工业网络零中断的秘密:手把手教你理解并配置PRP协议(基于IEC 62439-3)
工业网络零中断的秘密:手把手教你理解并配置PRP协议(基于IEC 62439-3) 在钢铁厂轧机轰鸣的生产线上,或是高铁信号控制系统的毫秒级响应中,任何网络中断都意味着数百万损失甚至安全事故。传统冗余技术如RSTP需要秒级收敛…...
Perplexity计算原理与业务落地脱节?——资深算法架构师亲授7步校准法,避免模型上线翻车
更多请点击: https://codechina.net 第一章:Perplexity的本质定义与数学直觉 Perplexity(困惑度)是衡量概率模型对未知序列预测能力的核心指标,其本质是交叉熵的指数形式,直观反映了模型在面对真实数据时的…...
手把手教你创建CST自定义材料:以吸波材料为例,导入厂家S参数曲线
手把手教你创建CST自定义材料:以吸波材料为例,导入厂家S参数曲线 在电磁仿真领域,材料参数的精确建模往往是决定仿真结果可靠性的关键因素。当我们需要模拟特殊频段的吸波材料、频率色散介质或各向异性材料时,仅依赖CST内置材料库…...
从‘盲人摸象’到‘全局视野’:手把手教你用MATLAB/Simulink仿真PSO-MPPT对抗光伏遮荫(避坑指南)
从‘盲人摸象’到‘全局视野’:手把手教你用MATLAB/Simulink仿真PSO-MPPT对抗光伏遮荫(避坑指南) 光伏发电系统在局部遮荫条件下,功率-电压特性曲线会呈现多峰值现象,传统MPPT算法容易陷入局部最优。粒子群优化&#x…...
OAuth 接入DeepSeek总失败?这3类JWT签名验证错误正在 silently 拒绝你的请求,速查!
更多请点击: https://kaifayun.com 第一章:OAuth 接入DeepSeek总失败?这3类JWT签名验证错误正在 silently 拒绝你的请求,速查! 当你调用 DeepSeek 的 OAuth 2.0 接口(如 /v1/auth/token)时&am…...
2026降AI率工具红黑榜:降AIGC工具怎么选?照着用就行!
2026年论文降AI率工具竞争激烈,千笔AI、ThouPen、豆包凭借精准适配国内高校AI率检测规范成为红榜首选。黑榜需警惕低质免费工具、无正规检测对接、改写痕迹生硬的产品。选择时应综合考量(降AI效果 - 学术合规性 - 使用成本)三维模型ÿ…...
OFDM-QPSK系统仿真避坑指南:如何正确设置SNR并解读星座图与误码率曲线
OFDM-QPSK系统仿真避坑指南:如何正确设置SNR并解读星座图与误码率曲线 在无线通信系统的仿真实践中,OFDM-QPSK组合因其抗多径干扰和频谱效率高的特点,成为研究者常用的验证模型。但许多初学者在MATLAB仿真中常遇到结果与理论不符的情况——星…...
GIFT高级技巧:图像组合、并行处理和性能优化的终极指南
GIFT高级技巧:图像组合、并行处理和性能优化的终极指南 【免费下载链接】gift Go Image Filtering Toolkit 项目地址: https://gitcode.com/gh_mirrors/gi/gift GIFT(Go Image Filtering Toolkit)是一个强大的Go语言图像处理库&#x…...
