3月13日(进阶5)
进阶5.大阶乘计算题目描述回形取数就是沿矩阵的边取数若当前方向上无数可取或已经取过则左转90度。一开始位于矩阵左上角方向向下。代码#includeiostream#includevectorusingnamespacestd;intmain(){intm,n;// 读取矩阵的行数和列数if(!(cinmn))return0;vectorvectorintmatrix(m,vectorint(n));vectorvectorboolvisited(m,vectorbool(n,false));// 读取矩阵数据for(inti0;im;i){for(intj0;jn;j){cinmatrix[i][j];}}// 定义四个方向下(1,0), 右(0,1), 上(-1,0), 左(0,-1)intdx[]{1,0,-1,0};intdy[]{0,1,0,-1};intx0,y0;// 初始位置 (0, 0)intdir0;// 初始方向为 0 (向下)inttotalm*n;for(inti0;itotal;i){// 输出当前位置的数控制行末无多余空格coutmatrix[x][y];if(i!total-1){cout ;}// 标记当前位置为已访问visited[x][y]true;// 计算下一个位置intnxxdx[dir];intnyydy[dir];// 判断下一个位置是否越界或已访问过if(nx0||nxm||ny0||nyn||visited[nx][ny]){// 如果遇到阻碍改变方向 (向左转 90 度)dir(dir1)%4;// 重新计算改变方向后的下一个位置nxxdx[dir];nyydy[dir];}// 更新当前位置xnx;yny;}coutendl;return0;}总结方向数组定义两个数组dx和dy来控制行和列的移动。按照题目要求的“下、右、上、左”顺序向下行坐标 1列坐标 0(1, 0)向右行坐标 0列坐标 1(0, 1)向上行坐标 -1列坐标 0(-1, 0)向左行坐标 0列坐标 -1(0, -1)访问标记使用一个与原矩阵同等大小的布尔矩阵visited来记录某个位置是否已经被取过数。转向判断每次按当前方向试探下一步。如果下一步越界超出矩阵范围或者对应的visited已经是true就将方向索引加 1 并对 4 取模实现向左转 90 度。翻译I. 操作系统的用户界面为了执行计算机用户请求的操作操作系统必须能够与这些用户进行通信。操作系统中处理这种通信的部分通常被称为用户界面。较早的用户界面称为shell通过使用键盘和显示器屏幕的文本消息与用户进行通信。更现代的系统通过图形用户界面GUI——发音为“GOO-ee”来执行此任务在这种界面中要操作的对象如文件和程序在显示器上以图形方式表示为图标。这些系统允许用户通过使用几种常见输入设备之一来发出命令。例如可以使用计算机鼠标来点击或拖动屏幕上的图标。图形艺术家经常使用专用定点设备或触控笔来代替鼠标或者在几种类型的手持设备上也是如此。最近高精度触摸屏的进步允许用户直接用手指操作图标。尽管今天的GUI使用二维图像投影系统但允许人类用户通过3D投影系统、触觉传感设备和环绕声音频再现系统与计算机进行通信的三维界面是当前研究的主题。尽管操作系统的用户界面在建立机器的功能性方面起着重要作用但该框架仅仅充当计算机用户与操作系统真正核心之间的中介图 2B-1。某些操作系统允许用户在不同的界面之间进行选择以获得针对该特定用户最舒适的交互体验这一事实强调了用户界面与操作系统内部部件之间的这种区别。