二維平面填充
using System;
using System.Linq;
using System.Text;
using System.Reflection;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
internal static class dfTexturePacker
{
public static Rect[] PackTextures2( this Texture2D texture, Texture2D[] textures, int padding, int maximumAtlasSize )
{
return PackTextures( texture, textures, padding, 256, 128, maximumAtlasSize );
}
private static Rect[] PackTextures( Texture2D texture, Texture2D[] sprites, int padding, int width, int height, int maxSize )
{
if( ( width > maxSize && height < maxSize ) || ( height > maxSize && width < maxSize ) )
{
width = height = maxSize;
}
if( width > maxSize || height > maxSize )
throw new InvalidOperationException( "Packed sprites exceed maximum atlas size" );
if( height > width )
{
int temp = width;
width = height;
height = temp;
}
MaxRectsBinPack bp = new MaxRectsBinPack( width, height, false );
Rect[] rects = new Rect[ sprites.Length ];
for( int i = 0; i < sprites.Length; i++ )
{
Texture2D sprite = sprites[ i ];
var spriteWidth = sprite.width + padding;
var spriteHeight = sprite.height + padding;
Rect rect = bp.Insert(
spriteWidth,
spriteHeight,
MaxRectsBinPack.FreeRectChoiceHeuristic.RectBestAreaFit
);
// If the rect could not be packed into the current dimensions,
// increase the texture size.
if( rect.width == 0 || rect.height == 0 )
{
return PackTextures( texture, sprites, padding, ( width <= height ? width << 1 : width ), ( height < width ? height << 1 : height ), maxSize );
}
rects[ i ] = rect;
}
// Check for max size
if( width > maxSize || height > maxSize )
throw new InvalidOperationException( "Packed sprites exceed maximum atlas size" );
texture.Resize( width, height );
texture.SetPixels( new Color[ width * height ] );
for( int i = 0; i < sprites.Length; i++ )
{
Texture2D sprite = sprites[ i ];
Rect rect = rects[ i ];
Color[] colors = sprite.GetPixels();
texture.SetPixels(
(int)rect.x,
(int)rect.y,
(int)sprite.width,
(int)sprite.height,
colors
);
rects[ i ] = new Rect(
rect.x / width,
rect.y / height,
( rect.width - padding ) / width,
( rect.height - padding ) / height
);
}
return rects;
}
private class MaxRectsBinPack
{
/*
Based on the Public Domain MaxRectsBinPack.cpp source by Jukka Jylänki
https://github.com/juj/RectangleBinPack/
Ported to C# by Sven Magnus
http://wiki.unity3d.com/index.php/MaxRectsBinPack
This version is also public domain - do whatever you want with it.
*/
public int binWidth = 0;
public int binHeight = 0;
public bool allowRotations;
public List<Rect> usedRectangles = new List<Rect>();
public List<Rect> freeRectangles = new List<Rect>();
public enum FreeRectChoiceHeuristic
{
RectBestShortSideFit, ///< -BSSF: Positions the rectangle against the short side of a free rectangle into which it fits the best.
RectBestLongSideFit, ///< -BLSF: Positions the rectangle against the long side of a free rectangle into which it fits the best.
RectBestAreaFit, ///< -BAF: Positions the rectangle into the smallest free rect into which it fits.
RectBottomLeftRule, ///< -BL: Does the Tetris placement.
RectContactPointRule ///< -CP: Choosest the placement where the rectangle touches other rects as much as possible.
};
public MaxRectsBinPack( int width, int height, bool rotations = false )
{
Init( width, height, rotations );
}
public void Init( int width, int height, bool rotations = false )
{
binWidth = width;
binHeight = height;
allowRotations = rotations;
Rect n = new Rect();
n.x = 0;
n.y = 0;
n.width = width;
n.height = height;
usedRectangles.Clear();
freeRectangles.Clear();
freeRectangles.Add( n );
}
public Rect Insert( int width, int height, FreeRectChoiceHeuristic method )
{
Rect newNode = new Rect();
int score1 = 0; // Unused in this function. We don't need to know the score after finding the position.
int score2 = 0;
switch( method )
{
case FreeRectChoiceHeuristic.RectBestShortSideFit: newNode = FindPositionForNewNodeBestShortSideFit( width, height, ref score1, ref score2 ); break;
case FreeRectChoiceHeuristic.RectBottomLeftRule: newNode = FindPositionForNewNodeBottomLeft( width, height, ref score1, ref score2 ); break;
case FreeRectChoiceHeuristic.RectContactPointRule: newNode = FindPositionForNewNodeContactPoint( width, height, ref score1 ); break;
case FreeRectChoiceHeuristic.RectBestLongSideFit: newNode = FindPositionForNewNodeBestLongSideFit( width, height, ref score2, ref score1 ); break;
case FreeRectChoiceHeuristic.RectBestAreaFit: newNode = FindPositionForNewNodeBestAreaFit( width, height, ref score1, ref score2 ); break;
}
if( newNode.height == 0 )
return newNode;
int numRectanglesToProcess = freeRectangles.Count;
for( int i = 0; i < numRectanglesToProcess; ++i )
{
if( SplitFreeNode( freeRectangles[ i ], ref newNode ) )
{
freeRectangles.RemoveAt( i );
--i;
--numRectanglesToProcess;
}
}
PruneFreeList();
usedRectangles.Add( newNode );
return newNode;
}
public void Insert( List<Rect> rects, List<Rect> dst, FreeRectChoiceHeuristic method )
{
dst.Clear();
while( rects.Count > 0 )
{
int bestScore1 = int.MaxValue;
int bestScore2 = int.MaxValue;
int bestRectIndex = -1;
Rect bestNode = new Rect();
for( int i = 0; i < rects.Count; ++i )
{
int score1 = 0;
int score2 = 0;
Rect newNode = ScoreRect( (int)rects[ i ].width, (int)rects[ i ].height, method, ref score1, ref score2 );
if( score1 < bestScore1 || ( score1 == bestScore1 && score2 < bestScore2 ) )
{
bestScore1 = score1;
bestScore2 = score2;
bestNode = newNode;
bestRectIndex = i;
}
}
if( bestRectIndex == -1 )
return;
PlaceRect( bestNode );
rects.RemoveAt( bestRectIndex );
}
}
void PlaceRect( Rect node )
{
int numRectanglesToProcess = freeRectangles.Count;
for( int i = 0; i < numRectanglesToProcess; ++i )
{
if( SplitFreeNode( freeRectangles[ i ], ref node ) )
{
freeRectangles.RemoveAt( i );
--i;
--numRectanglesToProcess;
}
}
PruneFreeList();
usedRectangles.Add( node );
}
Rect ScoreRect( int width, int height, FreeRectChoiceHeuristic method, ref int score1, ref int score2 )
{
Rect newNode = new Rect();
score1 = int.MaxValue;
score2 = int.MaxValue;
switch( method )
{
case FreeRectChoiceHeuristic.RectBestShortSideFit: newNode = FindPositionForNewNodeBestShortSideFit( width, height, ref score1, ref score2 ); break;
case FreeRectChoiceHeuristic.RectBottomLeftRule: newNode = FindPositionForNewNodeBottomLeft( width, height, ref score1, ref score2 ); break;
case FreeRectChoiceHeuristic.RectContactPointRule: newNode = FindPositionForNewNodeContactPoint( width, height, ref score1 );
score1 = -score1; // Reverse since we are minimizing, but for contact point score bigger is better.
break;
case FreeRectChoiceHeuristic.RectBestLongSideFit: newNode = FindPositionForNewNodeBestLongSideFit( width, height, ref score2, ref score1 ); break;
case FreeRectChoiceHeuristic.RectBestAreaFit: newNode = FindPositionForNewNodeBestAreaFit( width, height, ref score1, ref score2 ); break;
}
// Cannot fit the current rectangle.
if( newNode.height == 0 )
{
score1 = int.MaxValue;
score2 = int.MaxValue;
}
return newNode;
}
/// Computes the ratio of used surface area.
public float Occupancy()
{
ulong usedSurfaceArea = 0;
for( int i = 0; i < usedRectangles.Count; ++i )
usedSurfaceArea += (uint)usedRectangles[ i ].width * (uint)usedRectangles[ i ].height;
return (float)usedSurfaceArea / ( binWidth * binHeight );
}
Rect FindPositionForNewNodeBottomLeft( int width, int height, ref int bestY, ref int bestX )
{
Rect bestNode = new Rect();
//memset(bestNode, 0, sizeof(Rect));
bestY = int.MaxValue;
for( int i = 0; i < freeRectangles.Count; ++i )
{
// Try to place the rectangle in upright (non-flipped) orientation.
if( freeRectangles[ i ].width >= width && freeRectangles[ i ].height >= height )
{
int topSideY = (int)freeRectangles[ i ].y + height;
if( topSideY < bestY || ( topSideY == bestY && freeRectangles[ i ].x < bestX ) )
{
bestNode.x = freeRectangles[ i ].x;
bestNode.y = freeRectangles[ i ].y;
bestNode.width = width;
bestNode.height = height;
bestY = topSideY;
bestX = (int)freeRectangles[ i ].x;
}
}
if( allowRotations && freeRectangles[ i ].width >= height && freeRectangles[ i ].height >= width )
{
int topSideY = (int)freeRectangles[ i ].y + width;
if( topSideY < bestY || ( topSideY == bestY && freeRectangles[ i ].x < bestX ) )
{
bestNode.x = freeRectangles[ i ].x;
bestNode.y = freeRectangles[ i ].y;
bestNode.width = height;
bestNode.height = width;
bestY = topSideY;
bestX = (int)freeRectangles[ i ].x;
}
}
}
return bestNode;
}
Rect FindPositionForNewNodeBestShortSideFit( int width, int height, ref int bestShortSideFit, ref int bestLongSideFit )
{
Rect bestNode = new Rect();
//memset(&bestNode, 0, sizeof(Rect));
bestShortSideFit = int.MaxValue;
for( int i = 0; i < freeRectangles.Count; ++i )
{
// Try to place the rectangle in upright (non-flipped) orientation.
if( freeRectangles[ i ].width >= width && freeRectangles[ i ].height >= height )
{
int leftoverHoriz = Mathf.Abs( (int)freeRectangles[ i ].width - width );
int leftoverVert = Mathf.Abs( (int)freeRectangles[ i ].height - height );
int shortSideFit = Mathf.Min( leftoverHoriz, leftoverVert );
int longSideFit = Mathf.Max( leftoverHoriz, leftoverVert );
if( shortSideFit < bestShortSideFit || ( shortSideFit == bestShortSideFit && longSideFit < bestLongSideFit ) )
{
bestNode.x = freeRectangles[ i ].x;
bestNode.y = freeRectangles[ i ].y;
bestNode.width = width;
bestNode.height = height;
bestShortSideFit = shortSideFit;
bestLongSideFit = longSideFit;
}
}
if( allowRotations && freeRectangles[ i ].width >= height && freeRectangles[ i ].height >= width )
{
int flippedLeftoverHoriz = Mathf.Abs( (int)freeRectangles[ i ].width - height );
int flippedLeftoverVert = Mathf.Abs( (int)freeRectangles[ i ].height - width );
int flippedShortSideFit = Mathf.Min( flippedLeftoverHoriz, flippedLeftoverVert );
int flippedLongSideFit = Mathf.Max( flippedLeftoverHoriz, flippedLeftoverVert );
if( flippedShortSideFit < bestShortSideFit || ( flippedShortSideFit == bestShortSideFit && flippedLongSideFit < bestLongSideFit ) )
{
bestNode.x = freeRectangles[ i ].x;
bestNode.y = freeRectangles[ i ].y;
bestNode.width = height;
bestNode.height = width;
bestShortSideFit = flippedShortSideFit;
bestLongSideFit = flippedLongSideFit;
}
}
}
return bestNode;
}
Rect FindPositionForNewNodeBestLongSideFit( int width, int height, ref int bestShortSideFit, ref int bestLongSideFit )
{
Rect bestNode = new Rect();
//memset(&bestNode, 0, sizeof(Rect));
bestLongSideFit = int.MaxValue;
for( int i = 0; i < freeRectangles.Count; ++i )
{
// Try to place the rectangle in upright (non-flipped) orientation.
if( freeRectangles[ i ].width >= width && freeRectangles[ i ].height >= height )
{
int leftoverHoriz = Mathf.Abs( (int)freeRectangles[ i ].width - width );
int leftoverVert = Mathf.Abs( (int)freeRectangles[ i ].height - height );
int shortSideFit = Mathf.Min( leftoverHoriz, leftoverVert );
int longSideFit = Mathf.Max( leftoverHoriz, leftoverVert );
if( longSideFit < bestLongSideFit || ( longSideFit == bestLongSideFit && shortSideFit < bestShortSideFit ) )
{
bestNode.x = freeRectangles[ i ].x;
bestNode.y = freeRectangles[ i ].y;
bestNode.width = width;
bestNode.height = height;
bestShortSideFit = shortSideFit;
bestLongSideFit = longSideFit;
}
}
if( allowRotations && freeRectangles[ i ].width >= height && freeRectangles[ i ].height >= width )
{
int leftoverHoriz = Mathf.Abs( (int)freeRectangles[ i ].width - height );
int leftoverVert = Mathf.Abs( (int)freeRectangles[ i ].height - width );
int shortSideFit = Mathf.Min( leftoverHoriz, leftoverVert );
int longSideFit = Mathf.Max( leftoverHoriz, leftoverVert );
if( longSideFit < bestLongSideFit || ( longSideFit == bestLongSideFit && shortSideFit < bestShortSideFit ) )
{
bestNode.x = freeRectangles[ i ].x;
bestNode.y = freeRectangles[ i ].y;
bestNode.width = height;
bestNode.height = width;
bestShortSideFit = shortSideFit;
bestLongSideFit = longSideFit;
}
}
}
return bestNode;
}
Rect FindPositionForNewNodeBestAreaFit( int width, int height, ref int bestAreaFit, ref int bestShortSideFit )
{
Rect bestNode = new Rect();
//memset(&bestNode, 0, sizeof(Rect));
bestAreaFit = int.MaxValue;
for( int i = 0; i < freeRectangles.Count; ++i )
{
int areaFit = (int)freeRectangles[ i ].width * (int)freeRectangles[ i ].height - width * height;
// Try to place the rectangle in upright (non-flipped) orientation.
if( freeRectangles[ i ].width >= width && freeRectangles[ i ].height >= height )
{
int leftoverHoriz = Mathf.Abs( (int)freeRectangles[ i ].width - width );
int leftoverVert = Mathf.Abs( (int)freeRectangles[ i ].height - height );
int shortSideFit = Mathf.Min( leftoverHoriz, leftoverVert );
if( areaFit < bestAreaFit || ( areaFit == bestAreaFit && shortSideFit < bestShortSideFit ) )
{
bestNode.x = freeRectangles[ i ].x;
bestNode.y = freeRectangles[ i ].y;
bestNode.width = width;
bestNode.height = height;
bestShortSideFit = shortSideFit;
bestAreaFit = areaFit;
}
}
if( allowRotations && freeRectangles[ i ].width >= height && freeRectangles[ i ].height >= width )
{
int leftoverHoriz = Mathf.Abs( (int)freeRectangles[ i ].width - height );
int leftoverVert = Mathf.Abs( (int)freeRectangles[ i ].height - width );
int shortSideFit = Mathf.Min( leftoverHoriz, leftoverVert );
if( areaFit < bestAreaFit || ( areaFit == bestAreaFit && shortSideFit < bestShortSideFit ) )
{
bestNode.x = freeRectangles[ i ].x;
bestNode.y = freeRectangles[ i ].y;
bestNode.width = height;
bestNode.height = width;
bestShortSideFit = shortSideFit;
bestAreaFit = areaFit;
}
}
}
return bestNode;
}
/// Returns 0 if the two intervals i1 and i2 are disjoint, or the length of their overlap otherwise.
int CommonIntervalLength( int i1start, int i1end, int i2start, int i2end )
{
if( i1end < i2start || i2end < i1start )
return 0;
return Mathf.Min( i1end, i2end ) - Mathf.Max( i1start, i2start );
}
int ContactPointScoreNode( int x, int y, int width, int height )
{
int score = 0;
if( x == 0 || x + width == binWidth )
score += height;
if( y == 0 || y + height == binHeight )
score += width;
for( int i = 0; i < usedRectangles.Count; ++i )
{
if( usedRectangles[ i ].x == x + width || usedRectangles[ i ].x + usedRectangles[ i ].width == x )
score += CommonIntervalLength( (int)usedRectangles[ i ].y, (int)usedRectangles[ i ].y + (int)usedRectangles[ i ].height, y, y + height );
if( usedRectangles[ i ].y == y + height || usedRectangles[ i ].y + usedRectangles[ i ].height == y )
score += CommonIntervalLength( (int)usedRectangles[ i ].x, (int)usedRectangles[ i ].x + (int)usedRectangles[ i ].width, x, x + width );
}
return score;
}
Rect FindPositionForNewNodeContactPoint( int width, int height, ref int bestContactScore )
{
Rect bestNode = new Rect();
//memset(&bestNode, 0, sizeof(Rect));
bestContactScore = -1;
for( int i = 0; i < freeRectangles.Count; ++i )
{
// Try to place the rectangle in upright (non-flipped) orientation.
if( freeRectangles[ i ].width >= width && freeRectangles[ i ].height >= height )
{
int score = ContactPointScoreNode( (int)freeRectangles[ i ].x, (int)freeRectangles[ i ].y, width, height );
if( score > bestContactScore )
{
bestNode.x = (int)freeRectangles[ i ].x;
bestNode.y = (int)freeRectangles[ i ].y;
bestNode.width = width;
bestNode.height = height;
bestContactScore = score;
}
}
if( allowRotations && freeRectangles[ i ].width >= height && freeRectangles[ i ].height >= width )
{
int score = ContactPointScoreNode( (int)freeRectangles[ i ].x, (int)freeRectangles[ i ].y, height, width );
if( score > bestContactScore )
{
bestNode.x = (int)freeRectangles[ i ].x;
bestNode.y = (int)freeRectangles[ i ].y;
bestNode.width = height;
bestNode.height = width;
bestContactScore = score;
}
}
}
return bestNode;
}
bool SplitFreeNode( Rect freeNode, ref Rect usedNode )
{
// Test with SAT if the rectangles even intersect.
if( usedNode.x >= freeNode.x + freeNode.width || usedNode.x + usedNode.width <= freeNode.x ||
usedNode.y >= freeNode.y + freeNode.height || usedNode.y + usedNode.height <= freeNode.y )
return false;
if( usedNode.x < freeNode.x + freeNode.width && usedNode.x + usedNode.width > freeNode.x )
{
// New node at the top side of the used node.
if( usedNode.y > freeNode.y && usedNode.y < freeNode.y + freeNode.height )
{
Rect newNode = freeNode;
newNode.height = usedNode.y - newNode.y;
freeRectangles.Add( newNode );
}
// New node at the bottom side of the used node.
if( usedNode.y + usedNode.height < freeNode.y + freeNode.height )
{
Rect newNode = freeNode;
newNode.y = usedNode.y + usedNode.height;
newNode.height = freeNode.y + freeNode.height - ( usedNode.y + usedNode.height );
freeRectangles.Add( newNode );
}
}
if( usedNode.y < freeNode.y + freeNode.height && usedNode.y + usedNode.height > freeNode.y )
{
// New node at the left side of the used node.
if( usedNode.x > freeNode.x && usedNode.x < freeNode.x + freeNode.width )
{
Rect newNode = freeNode;
newNode.width = usedNode.x - newNode.x;
freeRectangles.Add( newNode );
}
// New node at the right side of the used node.
if( usedNode.x + usedNode.width < freeNode.x + freeNode.width )
{
Rect newNode = freeNode;
newNode.x = usedNode.x + usedNode.width;
newNode.width = freeNode.x + freeNode.width - ( usedNode.x + usedNode.width );
freeRectangles.Add( newNode );
}
}
return true;
}
void PruneFreeList()
{
for( int i = 0; i < freeRectangles.Count; ++i )
for( int j = i + 1; j < freeRectangles.Count; ++j )
{
if( IsContainedIn( freeRectangles[ i ], freeRectangles[ j ] ) )
{
freeRectangles.RemoveAt( i );
--i;
break;
}
if( IsContainedIn( freeRectangles[ j ], freeRectangles[ i ] ) )
{
freeRectangles.RemoveAt( j );
--j;
}
}
}
bool IsContainedIn( Rect a, Rect b )
{
return a.x >= b.x && a.y >= b.y
&& a.x + a.width <= b.x + b.width
&& a.y + a.height <= b.y + b.height;
}
}
}
using System; | |
using System.Linq; | |
using System.Text; | |
using System.Reflection; | |
using System.Collections; | |
using System.Collections.Generic; | |
using UnityEngine; | |
internal static class dfTexturePacker | |
{ | |
public static Rect[] PackTextures2( this Texture2D texture, Texture2D[] textures, int padding, int maximumAtlasSize ) | |
{ | |
return PackTextures( texture, textures, padding, 256, 128, maximumAtlasSize ); | |
} | |
private static Rect[] PackTextures( Texture2D texture, Texture2D[] sprites, int padding, int width, int height, int maxSize ) | |
{ | |
if( ( width > maxSize && height < maxSize ) || ( height > maxSize && width < maxSize ) ) | |
{ | |
width = height = maxSize; | |
} | |
if( width > maxSize || height > maxSize ) | |
throw new InvalidOperationException( "Packed sprites exceed maximum atlas size" ); | |
if( height > width ) | |
{ | |
int temp = width; | |
width = height; | |
height = temp; | |
} | |
MaxRectsBinPack bp = new MaxRectsBinPack( width, height, false ); | |
Rect[] rects = new Rect[ sprites.Length ]; | |
for( int i = 0; i < sprites.Length; i++ ) | |
{ | |
Texture2D sprite = sprites[ i ]; | |
var spriteWidth = sprite.width + padding; | |
var spriteHeight = sprite.height + padding; | |
Rect rect = bp.Insert( | |
spriteWidth, | |
相關推薦二維平面填充using System; using System.Linq; using System.Text; using System.Reflection; using System.Collections; using System.Collections.Generic; usin RBF核函式將一維線性不可分資料對映到二維平面上變成線性可分的資料#!/usr/bin/python # -*- coding: utf-8 -*- import matplotlib.pyplot as plt from sklearn import datasets import pandas as pd import numpy as np x = np.a 最近對問題(二維平面上的點)分治法#include<iostream> #include<ctime> #include<cmath> #include<algorithm> using namespace std; #define number 100000 給定一個二維平面,平面上有 n 個點,求最多有多少個點在同一條直線上。需求:給定一個二維平面,平面上有 n 個點,求最多有多少個點在同一條直線上。 分析思路: 1、將所有點二維座標化,即定義出所有點的x,y座標值 2、遍歷出所有取出兩點的情況(不考慮先後順序),根據任意兩點都確定一條直線,直線引數為k斜率,b與y軸交點的縱座標(此時x=0),將他們放入一個 二維平面求一條直線經過的最大點數題目:Given n points on a 2D plane, find the maximum number of points that lie on the same straight line.問題描述:在一個二維平面上有n個點,求出現在同一直線上的點的最大個數分析 WGS84座標系的資料如何顯示在二維平面轉自:http://bbs.rscloudmart.com/thread-461-1.html常見的web地圖座標系,有兩類:一類使用WGS84地理座標系(EPSG:4326)直投;另一類使用web墨卡託(EPSG:3857)投影座標系。 首先來說說WGS84地理座標系。WGS84是美國GPS全球定位系統使 三維空間透視投影至二維平面前言 其實這篇文章講的就是類似於MATLAB中的mesh函式的實現原理。想要實現的功能就是已知網格三維座標,如何將轉成在某個視角下的二維座標。說白了就是如何將三維座標用電腦呈現出來(因為電腦平面是二維的)。比如下面這些三維座標點。 具體步驟 主要分為三 [Java]給定二維平面中的4個座標點,如何判定這四個座標點能否構成長方形?(經_典_面_試_題_目)給定二維平面內的四個點,判斷這四個點是否能組成正方形。座標(x,y)為整數。 輸入的整數範圍為 [-10000, 10000]。 當我們面對問題的時候首先不能頭大,回顧初中所學的知識,如何判 平面二維任意橢圓數據擬合算法推導及程序實現詳解tar 擬合 推導 oai http margin oci 二維 詳解 0墾oe辟煽6味h幼瀾6http://t.docin.com/laiys67141 x0涸tj妝06曬妒http://t.docin.com/sina_6267117010 9剿襖2閱b盎忍40ht THREE.JS 場景世界座標和平面二維座標互轉<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>場景世界座標轉</title> 平面二維DP馬攔過河卒 原題傳送門 這一到題目也是比較基礎的動態規劃,也可以理解為是遞推,主要是運用加法原理,思維難度不大。我們要求從\((0,0)\)到\((n,n)\)的方案總數,如果沒有馬的話,我們可以這麼做: 設\(f[i][j]\)為從\((0,0)\)走到\((i,j)\)的方案總數,我們知道一定是有上面 百練noi21:二維陣列右上左下遍歷,24:蛇形填充陣列21:二維陣列右上左下遍歷 檢視提交統計提問 總時間限制: 1000ms 記憶體限制: 65536kB 描述 給定一個row行col列的整數陣列array,要求從array[0][0]元 在PHP裡.如何定義二維陣列和賦值.並且把陣列中的值填充到table中。php: require 'smarty/libs/Smarty.class.php'; $smarty = new Smarty;//設定各個目錄的路徑,這裡是安裝的重點 $smarty->template_dir ="smarty/templates/temp 二維數組遍歷filepath add path i++ 讀取 length emp alt -1 從列表中讀取二維數組 Object[][] ss = ExcelUtil.getTestData(Constant.TestDataExcelFilePath, Constant.Tes python之二維碼生成pre 生成 images alt make log pytho opened .com 生成的二維碼只是網址的鏈接 直接上代碼: 1 import qrcode 2 title = input("要生成的內容:") 3 img = qrcode.make(title) 掃描二維碼自動識別手機APP下載地址新浪 推廣 amp 需要 android 通過 來源 中文版 blog 原文地址https://www.baidufe.com/item/92457b4d0bfde1effa40.html 移動互聯網發展迅速,各種APP的開發都太瘋狂了,一般稍大點兒的應用,都會準備多個版本 [luoguP2216] [HAOI2007]理想的正方形(二維單調隊列)++ pla https hide 正方形 closed log 傳送門 name 傳送門 1.先弄個單調隊列求出每一行的區間為n的最大值最小值。 2.然後再搞個單調隊列求1所求出的結果的區間為n的最大值最小值 3.最後掃一遍就行 懶得畫圖,自己體會吧。 PHP二維數組排序sta return style code bsp val array desc con //二維數組排序 function arrSort($data , $sort){ // $sort = array( // ‘direction‘ => 指針與一維數組和二維數組以及字符串指針數組的學習筆記個人 alt sizeof mage .com size 關系 指向 應該 廢話不多少,直接上代碼,關鍵的東西已經註釋了,看註釋信息理解即可。 說明:本程序討論了一維數組和指針的關系,談論了二維數組和指針之間的關系,討論了字符串數組指針數組和指針之間的關系,代碼中以給出定義 nltp APP-分析買家評論的評分-高頻詞:二維關系dir yellow imp font direct let swe nco lec w # -*- coding: utf-8 -*- from nltk import * # TO FIX : No such file or directory os.ch |