题目:
Given a 2D board containing 'X' and 'O', capture all regions surrounded by'X'.
A region is captured by flipping all 'O's into 'X's in that surrounded region .
For example,
X X X X X O O X X X O X X O X X
After running your function, the board should be:
X X X X X X X X X X X X X O X X
代码如下:
queue<int> q;
int n;
void fill(int x,int y,vector<vector<char>> &board)
{
if(x<0||x>=n||y<0||y>=n||board[x][y]!='O')return;
q.push(x*n+y);
board[x][y]='D';
}
void BFS(int x,int y,vector<vector<char>> &board)
{
fill(x,y,board);
while(q.size()>0)
{
int top=q.front();
q.pop();
int i=top/n;
int j=top%n;
fill(i-1,j,board);
fill(i+1,j,board);
fill(i,j-1,board);
fill(i,j+1,board);
}
}
void solve(vector<vector<char>> &board)
{
n=board.size();
if(n<=2)return;
for(int i=0;i<n;i++)
{
BFS(i,0,board);
BFS(i,n-1,board);
}
for(int j=1;j<n-1;j++)
{
BFS(0,j,board);
BFS(n-1,j,board);
}
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
if(board[i][j]=='O')board[i][j]='X';
else if(board[i][j]=='D')board[i][j]='O';
}
}
}
继续 AVR工具指南(一)的内容
3. WinCUPLWinCUPL(可编程逻辑通用编译器)是一款可以为SPLD和CPLD创造出非常复杂的逻辑设计的逻辑编译器。该工具使得工程师们可以设计出他们自己的逻辑电路并创建出JEDEC(联合电子设备工程委员会标准)文件。因此,你可以使用ROM writer在设备中进行映射。
WinCUPL()
The WinCUPL 套件包含如下工具:
WinCUPL 一款为所有WinCUPL工具,包括编译器在内,设计的强大的前端和用户接口。
CUPL Compiler 用CUPL语言编写的逻辑描述在编译后,可以被分配到指定的逻辑器件(PLDs)上。在编译的基础之上,CUPL编译器查找它的库文件并创建可以下载到设备编译器上的文件。从此,该PLD即可编译。
Simulator 在设计被制作为产品之前,他们可以使用CSIM进行仿真。CSIM将预期的数值和在CUPL操作中计算出的实际的数值相比较。仿真的输入和结果可以图形化地观察并通过WinSim进行修改。
WinSim 仿真输入和结果可以通过Winsim设置并显示波形。
3.1. 如何安装1) 转到 http://www.atmel.com/dyn/products/tools_card.asp?tool_id=2759
2) 在该页面内点击 “注册并下载”。
图 3‑1. Atmel网站中下载WinCUPL的地址.
1) 下载前请先注册并获取序列号。在完成准备工作后,你就可以开始下载了
2) “awincupl.exe运行下载的文件“awincupl.exe”
3) 安装下面的安装程序精灵
4) 重新启动之后,执行Start>Program>Atmel WinCupl>WinCupl
图 3‑2. WinCUPL’s 主界面.
3.2. 使用 CUPL语言进行设计这一节介绍的是CUPL的设计操作,并向你展示了关于设计流程的样例。
3.2.1. 语法的使用基本的逻辑和算数运算符,以及二进制等式设计中使用的函数如下。
1) 逻辑运算符
下表显示了使用NOT,AND,OR和XOR等逻辑运算符的表达方式和优先级。
2) 算数运算符和函数
下表显示了6个常用的运算符的表达方式,样例以及优先级。
用$repeat和$macro指令定义的算数函数可以被用在算数表达式中。下表显示了算数函数和它的进制数。
3.2.1. 开始设计现在,我们开始介绍如何通过简单的样例来设计PLD。按照如下步骤,你可以执行包含等待功能的PLD。
1) 在WinCupl,执行过后,点击Click File>New>Project。
2) 你可以在设计选项中写入上面提到的内容,然后点击OK按钮,INPUT PIN窗口出现。
图 3‑3. INPUT PIN 界面
3) 输入INPUT PIN序号并点击OK按钮。然后,按照相同的方法输入OUTPUT PIN, PINNODESS等的信息。(*如果设计者已经知道了他想使用的设备,则需要进行引脚分配)
4) 在设计窗口下已经创建了表格,然后按照用户需要编写程序。
图 3‑4. 样例代码.
5) 在Options > Devices菜单界面下选择你将使用的设备。在设备选择完成后,你应该在你的编程页输入“Device Mnemonic”信息。
请参考下图左下角的屏幕截图。
图 3‑5. 设备选择.
3.2.3. 编译1) 在编程过程结束之后,请通过运行菜单或者对应的图标,选择你想要编译的项目
图 3‑6. 设备关联编译.
2) 编译过程完成后,编译结果界面会显示在你的显示器上,如下图所示。
图 3‑7. 编译结果
3) 你可以通过编译来确认新创建的JEDEC文件。
但是,如果你在虚拟条件下写入设备信息,你将不能生成JEDEC文件。因此,此过程需要格外注意。
图 3‑8. 创建 JEDEC 文件界面
4) 你可以在设备中已常见的JEDEC文件中使用Rom writer来执行写操作。
你可以从 http://www.atmel.com 或者WinCUPL用户手册获取到更多的信息。
感谢您的关注!
错误信息如下:
Traceback (most recent call last): File "webpy.py", line 84, in <module> app.run() File "D:\Python27\lib\site-packages\web\application.py", line 313, in run return wsgi.runwsgi(self.wsgifunc(*middleware)) File "D:\Python27\lib\site-packages\web\wsgi.py", line 55, in runwsgi server_addr = validip(listget(sys.argv, 1, '')) File "D:\Python27\lib\site-packages\web\net.py", line 108, in validip if validip6addr(ip): return (ip,port) File "D:\Python27\lib\site-packages\web\net.py", line 33, in validip6addr socket.inet_pton(socket.AF_INET6, address) AttributeError: 'module' object has no attribute 'inet_pton'
解决方法,修改Python安装目录下Lib\site-packages\web\net.py文件的第32到第35行为如下内容:
try: socket.inet_pton(socket.AF_INET6, address) except: return False
参考:https://github.com/webpy/webpy/pull/195#issuecomment-19143945